在“ Latin1_General_CI_AS”数据库上选择西里尔地址

时间:2018-08-29 10:56:59

标签: sql sql-server database tsql collation

我有西里尔文的地址正确存储(用nvarchar存储在slq-server数据库中。

选择西里尔地址所在的行时,select语句正确返回该行。

但是,当尝试选择具有特定地址的所有行时(例如,在where子句中),select不会发现任何内容,因为它采用西里尔字母搜索词,并根据拉丁文排序规则将其转换为{{1 }},并在数据库中搜索?????',这当然是找不到的。

可以解决此问题,例如通过服务器或数据库设置,而无需使用前缀?????',也不会丢失所有德语,法语,...口音?

和/或,对于西欧和西里尔符号,是否有“整体校对”,或者对于UNICODE,通常有16位校对吗?

1 个答案:

答案 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传递,则应使用具有适当排序规则的另一个数据库的上下文