我有西里尔文的地址正确存储(用nvarchar
存储在slq-server
数据库中。
选择西里尔地址所在的行时,select语句正确返回该行。
但是,当尝试选择具有特定地址的所有行时(例如,在where
子句中),select不会发现任何内容,因为它采用西里尔字母搜索词,并根据拉丁文排序规则将其转换为{{1 }},并在数据库中搜索?????'
,这当然是找不到的。
可以解决此问题,例如通过服务器或数据库设置,而无需使用前缀?????'
,也不会丢失所有德语,法语,...口音?
和/或,对于西欧和西里尔符号,是否有“整体校对”,或者对于UNICODE,通常有16位校对吗?
答案 0 :(得分:0)
如果您想在cyrillic
中传递搜索字符串,但不使用Unicode
,则应该在“西里尔数据库”的上下文中启动查询,即您的数据库(我将其命名为{ {1}}具有LatinDB
排序规则,您应该创建另一个具有西里尔字母排序规则的数据库,例如Latin1_General_CI_AS
,然后像这样从CyrDB
的上下文中查询数据库:>
CyrDB
可以解决此问题,例如通过服务器或数据库设置,无需 要求使用前缀“ N”,并且不会丢失所有德语, 法国,...重音符号?
如果您要在结果集中保留这些“重点”,则它们将被保留,因为字段为use CyrDB;
select *
from LatinDB.dbo.your_tbl
where address = 'какой-то там адрес' -- here I'm not using Unicode, no N character behind my string
。
如果您要在同一nvarchar
上下文中输入查询,则应精确定义要松开的符号,如果它们的ascii码为1到127,您仍然可以使用{{1} }以启动查询,但是如果您的字符大于128,并且您不想将其作为Cyrillic
传递,则应使用具有适当排序规则的另一个数据库的上下文