SQL-запрос и проблема с Unicode

У меня действительно странная проблема с запросами Sql к данным Unicode. Вот что у меня есть:

  • SQL Server Express 2008 R2 как
  • Таблица, содержащая китайские иероглифы/слова/фразы (100 000 строк)

Когда я запускаю следующее, я получаю правильную строку + 36 других строк... когда это должна быть только одна строка:

SELECT TOP 1000 [ID]
      ,[MyChineseColumn]
      ,UNICODE([MyChineseColumn])
  FROM [dbo].[MyTableName]
  WHERE [MyChineseColumn]= N'㐅'

Как и следовало ожидать, возвращается строка с , а также следующие: , , и куча других...

У кого-нибудь есть идеи, что здесь происходит? Это действительно меня смутило, и я не уверен, как решить эту проблему (уже пробовал "гуглить")...

Спасибо


person Matt    schedule 03.02.2011    source источник
comment
Я также должен упомянуть, что большинство других строк все запрашивают отлично... это всего лишь несколько хитрых, таких как выше, которые я действительно хотел бы выяснить причину. Может быть, это делает определенный диапазон символов Unicode? Я понятия не имею...   -  person Matt    schedule 03.02.2011
comment
Поскольку у меня нет шрифта, который может отображать 㐅 или 㐅, для меня они выглядят одинаково. Для справки: первое (и второе) 㐅 равно U+3405. CJK UNIFIED IDEOGRAPH-3405, а второй (последний символ в списке неверных результатов) — U+3BB8 CJK UNIFIED IDEOGRAPH-3BB8.   -  person Joachim Sauer    schedule 03.02.2011
comment
Какая у вас сортировка столбцов?   -  person Martin Smith    schedule 03.02.2011
comment
Спасибо, Мартин... Я провел небольшое исследование и нашел сопоставление, которое мне нужно было использовать, и теперь оно работает. Я хотел бы отметить это как ответ, но вы только прокомментировали. Если вы добавите его в качестве ответа, я отмечу его как ОТВЕТ. :-) Спасибо!   -  person Matt    schedule 03.02.2011
comment
@ Мэтт - Готово! Просто из любопытства, какое сопоставление вы использовали, чтобы одинаково обрабатывать эти 4 символа? Даже под SQL_Latin1_General_CP1_CI_AI я получил 2 строки назад для declare @t TABLE (c nchar(1) collate SQL_Latin1_General_CP1_CI_AI) INSERT INTO @t values (N'㐅'),(N'〇'),(N'宁'),(N'㮸') SELECT DISTINCT c FROM @t   -  person Martin Smith    schedule 03.02.2011
comment
Привет, Мартин, я использовал Latin1_General_CI_AS (база данных по умолчанию). Спасибо еще раз.   -  person Matt    schedule 03.02.2011


Ответы (2)


Убедитесь, что в столбце используются соответствующие китайские параметры сортировки, так как это определяет семантику, используемую в этом типе сравнения.

person Martin Smith    schedule 03.02.2011

Вы можете попробовать использовать двоичную сортировку, эти символы каким-то образом сопоставляются как идентичные (возможно, игнорируя регистр и/или акценты, в зависимости от используемой сортировки).

person Lucero    schedule 03.02.2011