Китайская сортировка для MS SQL

Я обнаружил в нашей производственной БД для азиатского рынка странное поведение. Где условие не работает, как можно было бы ожидать в случае китайских букв.

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? Это китайский радикал (штрихи)?

Спасибо


person Jaroslav Kubacek    schedule 15.02.2017    source источник


Ответы (1)


После некоторого исследования я нашел стандарт GB 18030, который определяет требуемый языковая и символьная поддержка, необходимая для программного обеспечения в Китае. И я обнаружил, что Microsoft System Center Configuration Manager совместим с этим стандартом только в том случае, если для параметра сортировки базы данных задано одно из следующих значений:

  • Китайский_упрощенный_пиньинь_100_CI_AI
  • Китайский_Simplified_Stroke_Order_100_CI_AI

Наш клиент предпочитает порядок штрихов, поэтому я попробовал Chinese_Simplified_Stroke_Order_100_CI_AI, и он отлично работает.

Даже если это не ответ, почему китайский_PRC_CI_AS не работает, или более подробная информация о китайском_PRC_BIN, это подходящее решение.

person Jaroslav Kubacek    schedule 16.02.2017