拉丁表中外语字段的查询排序规则

Posted

技术标签:

【中文标题】拉丁表中外语字段的查询排序规则【英文标题】:query collation on foreign language field in Latin table 【发布时间】:2012-07-25 11:04:58 【问题描述】:

我有一系列表格,每个表格都有专门的外语列。语言有日语、泰语、英语、意大利语、法语等20多种。

所有这些表均使用拉丁文不区分大小写排序规则设置。数据库工作正常。

但现在我正在尝试查询每个表的特定外语列。让我们以日语作为初学者。我想让外语用户输入外文,根据外语栏找到记录。

  DECLARE @myVar nvarchar(max);

  SET @myVar =  'エンジン ストップ リレー'      = 'Engine Stop Relay' in english

  Select *
  FROM tableJapanese
  WHERE langString = @myVar;

我尝试了多种排序规则组合。我什至复制了表并将列的排序规则更改为 Japanese_CI_AI 并尝试以这种方式查询。

当列是拉丁语或日语时,这些 WHERE 子句均不适用于表/列排序规则...

WHERE lang_String collate Japanese_CI_AI = @myVar;
WHERE lang_String = @myVar collate Japanese_CI_AI;
WHERE lang_String collate Japanese_CI_AI = @myVar collate Japanese_CI_AI;

WHERE lang_String collate Japanese_CI_AI = @myVar;
WHERE lang_String = @myVar collate Japanese_CI_AI;
WHERE lang_String collate Japanese_CI_AI = @myVar collate Japanese_CI_AI;

我想将列/数据库保留为拉丁排序规则,并尽可能对每种语言的查询进行编码。

这似乎是我已经被蛇咬过的问题之一。谁能看到我错过了什么?

MSSQL Express 2008 R2

解决方案

字段前加N,表示unicode to SQL...

  Select *
  FROM tblLangJAP_test
  WHERE lang_String = N'エンジン ストップ リレー';

完美运行。

谢谢,

【问题讨论】:

lang_String 列的数据类型是什么? varcharnvarchar? lang_String 是一个与我的示例查询相同的 nvarchar(max) 完全匹配应该始终有效,排序规则应该只添加不同的大小写并强调匹配列表。如果您设置一个复制您的问题的 SQLFiddle.com 示例会有所帮助吗? 我试过 SQLFiddle.com 但实际上它并没有提供任何帮助。返回的字符串都是问号'???? ??? ???' sqlfiddle.com/#!3/23d41/5/0 好吧,也许它显示的日文字符串错误,但where 子句确实匹配!这就是你要找的对吗? 【参考方案1】:

在字段前加N,表示unicode to SQL... 选择 * FROM tblLangJAP_test WHERE lang_String = N'エンジン ストップ リレー';

完美运行。

【讨论】:

以上是关于拉丁表中外语字段的查询排序规则的主要内容,如果未能解决你的问题,请参考以下文章

创建自定义 MySQL 排序规则

mysql汉字排序规则

mysql设置字段的排序规则对大小写敏感

mysql 查询中的文本是不是可能不遵守排序规则?

sql SQL查询以查找表中的列中的重复项,从而更改列的排序规则以确保重复项检查为大小写

与临时表中的列进行比较时发生 SQL 排序规则冲突