Tips and Tricks: изменяем схему сопоставления (collation) в SQL Server
Во первых, несколько слов о том, для чего нужны схемы сопоставления и главное, почему важно на них обращать внимание!
Если коротко, то "схемы сопоставления содержат шаблоны каждого символа, правила сортировки и сравнения". А если конкретнее, то:
В машинном представлении любой символ или знак представляет различные комбинации битов в состоянии 1 или 0.
Соответственно использование одного байта для хранения символа дает возможность определить до 256 различных
символов. Если увеличить объем данных до двух байт, то получим возможность распознавать 65 536 символов.
Кодовая страница есть ни что иное, как набор различных комбинации состояний битов (всего 256) в байтовой
структуре. Эти комбинации определяют символы верхнего и нижнего регистров, цифры, специальные символы.
При переносе данных между компьютерными системами с различными кодовыми страницами необходимо выполнить
преобразование. Символы, битовая комбинация которых отсутствует в схеме назначения, в результате будут
потеряны.
Для разрешения подобных ситуаций международная организация стандартов ISO и группа Unicode разработали
стандарт Unicode. Для этого стандарта применяется двухбайтовая схема, которая содержит 65 536 символов и
охватывает все символы основных языков. Если используется стандарт Unicode, то преобразования не происходит,
благодаря чему ускоряется обработка и исключается потеря символьных данных. Порядок сортировки определяет правила для сравнения и представления символов. Например, символ "а" больше,
меньше или равен символу "б". Кроме того, порядок сортировки устанавливает правила сопоставления символов
верхнего и нижнего регистров.
Что такое схемы, я думаю, понятно, теперь ответим на вопрос, почему это важно.
Все дело в том, что, часто не посмотрев на то, какая схема установлена на сервере, мы можем получить ошибку "Cannot resolve collation conflict". Ошибки возникают, в основном, в таких случаях:
- Если выполнять соединения JOIN или UNION с таблицами из базы с другой схемой сопоставления.
- Когда выполняется работа с временными таблицами в контексте рабочей базы данных.
- Самый общий случай - когда пытаются сравнить значения символьных полей разных схем сопоставления (даже в пределах одной таблицы или базы данных).
Очень простой пример. У вас на сервере установлена схема "Ukraininan" (по умолчанию для нас с вами), а проект делается для англоязычного заказчика. Вот и получается, что латинские буквы сравниваются "по-украински". Для маленьких проектов этот факт может пройти незамеченным, но для больших, и тем более серьезных - проблем не миновать.
Поэтому нужно при установке SQL Server внимательно отнестись к этому вопросу (смотрим на рисунок).
Удачи!