拉丁表中外语字段的查询排序规则
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
列的数据类型是什么? varchar
或 nvarchar
?
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'エンジン ストップ リレー';
完美运行。
【讨论】:
以上是关于拉丁表中外语字段的查询排序规则的主要内容,如果未能解决你的问题,请参考以下文章