Jar*_*cek 5 t-sql sql-server localization chinese-locale
我在亚洲市场的生产数据库中发现了奇怪的行为。在中文字母的情况下,条件不像人们所期望的那样工作。
create table #Temp (TextContent nvarchar(20), ChineseType varchar(10))
insert #Temp values (N'?', '??') --odd
insert #Temp values (N'', '??') --odd
insert #Temp values (N'?', '??') --odd
insert #Temp values (N'?', 'prc') --odd
insert #Temp values (N'?', 'prc')
insert #Temp values (N'?', 'prc')
insert #Temp values (N'?', 'prc')
insert #Temp values (N'?', 'prc')
insert #Temp values (N'?', 'taiwan')
insert #Temp values (N'?', 'taiwan')
insert #Temp values (N'?', 'taiwan')
insert #Temp values (N'?', 'taiwan')
insert #Temp values (N'?', 'taiwan')
select * from #Temp where TextContent like ''
select * from #Temp where TextContent like N''
select * from #Temp where TextContent like N'?'
-- all will return
-- |TextContent | ChineseType |
-- | ? | ?? |
-- | | ?? |
-- | ? | ?? |
-- | ? | prc |
Run Code Online (Sandbox Code Playgroud)
首先我发现默认的排序规则是 SQL_Latin1_General_CP1_CI_AS 因此我在谷歌上搜索了一些关于中文字母、排序、排序的理论,然后我尝试了 Chinese_PRC_CI_AS、Chinese_PRC_CI_AI、Chinese_PRC_CI_AS_KS_WS、Chinese_PRC_CS_AS_KS_WS 但没有成功。总是返回相同的结果。
select * from #Temp where TextContent like N'?' COLLATE Chinese_PRC_CI_AS
select * from #Temp where TextContent like N'?' COLLATE Chinese_PRC_CI_AI
-- all will return
-- |TextContent | ChineseType |
-- | ? | ?? |
-- | | ?? |
-- | ? | ?? |
-- | ? | prc |
Run Code Online (Sandbox Code Playgroud)
唯一的“按预期工作”是二进制排序规则,例如。Chinese_PRC_BIN、Chinese_PRC_BIN2、Latin1_General_BIN。
谢谢
经过一番调查,我发现标准GB 18030定义了中国软件所需的语言和字符支持。我发现 Microsoft 的 System Center Configuration Manager仅在 db collation 设置为以下之一的情况下才与此标准兼容:
我们的客户更喜欢笔画顺序,所以我尝试了 Chinese_Simplified_Stroke_Order_100_CI_AI 并且效果很好。
即使它没有回答为什么 Chinese_PRC_CI_AS 不起作用或有关 Chinese_PRC_BIN 排序的更多详细信息,它也是适用的解决方案。
| 归档时间: |
|
| 查看次数: |
6987 次 |
| 最近记录: |