我在我们的亚洲市场生产数据库中发现了奇怪的行为。在中文字母的情况下,条件并不像人们所期望的那样工作。
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 |
首先我发现默认排序规则是 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 |
唯一的“按预期工作”是二进制排序规则,例如。中文_PRC_BIN、中文_PRC_BIN2、拉丁语1_General_BIN。
- 有人解释一下为什么 Chinese_PRC_CI_AS 不起作用吗?
- Chinese_PRC_BIN排序顺序类型是什么?是汉字部首(笔画)吗?
Thanks