Sql Server Collation - PullRequest
       7

Sql Server Collation

8 голосов
/ 22 февраля 2010

Книга, которую я читаю, говорит, что

SQL Server поддерживает два типа символьных типов данных - обычный и Unicode. Обычные типы данных включают CHAR и VARCHAR, а типы данных Unicode включают NCHAR и NVARCHAR. Разница в том, что обычные символы используют один байт памяти для каждого символа, в то время как символы Юникода требуют два байта на символ. С одним байтом памяти на символ, выбор обычного символьного типа для столбца ограничивает вас одним языком в дополнение к английскому, потому что только 256 (2 ^ 8) различных символов могут быть представлены одним байтом.

Что я узнал, так это то, что если я использую Varchar, то я могу использовать только один язык (например, хинди, индийский язык) наряду с английским.
Но когда я запускаю это

Create Table NameTable
(
    NameColumn varchar(MAX) COLLATE Indic_General_90_CI_AS_KS
)

Появляется сообщение об ошибке «Сопоставление Indic_General_90_CI_AS_KS» поддерживается только для типов данных Unicode и не может применяться к типам данных char, varchar или text. »

Так где же я неправильно понял автора?
Спасибо

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Используйте это в своем выражении SQL, учитывая, что «content» - это переменная, содержащая арабскую строку, которую вы хотите вставить:

update Table set contents = convert(text, N'" + content + "' collate Arabic_CI_AS)

Работает нормально.

3 голосов
/ 22 февраля 2010

Вы можете найти список параметров сортировки здесь вместе с типом кодировки


Некоторые параметры сортировки применяются только к 1-байтовым кодировкам - 127 бит используются для обычного ASCII и 128 доступны для других символов - хинди, вероятно, не помещается в 128 символов, поэтому 1-байтовое сравнение не применяется к нему ,

Вы должны будете использовать nvarchar (или другой префиксный тип символов 'n').

- редактировать -

French_CI_AS как неанглоязычный пример

Одной из вещей, которые позволяют сортировки, является упорядочение символов в зависимости от языка и локали. Поэтому французский! = Латинский.

Другой пример Arabic_CI_AS

Это 1-байтовая кодировка с арабским алфавитом.

1 голос
/ 12 мая 2010

Вы можете использовать это

name = N'مرحبا كيف حالك'
...