Я обнаружил в нашей производственной БД для азиатского рынка странное поведение. Где условие не работает, как можно было бы ожидать в случае китайских букв.
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, поэтому я погуглил некоторую теорию о китайском алфавите, сортировке, сопоставлении, а затем попробовал китайский_PRC_CI_AS, китайский_PRC_CI_AI, китайский_PRC_CI_AS_KS_WS, китайский_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_Общий_BIN.
- Кто-нибудь объяснит, почему не работает китайский_PRC_CI_AS?
- Что такое тип порядка сортировки Chinese_PRC_BIN? Это китайский радикал (штрихи)?
Спасибо