Collation (сопоставление) — это набор правил, определяющих способ сравнения, сортировки и представления строковых данных в SQL Server. Это комплексный параметр, который влияет на обработку текстовой информации.
-- Пример: SQL_Latin1_General_CP1_CI_AS
--
-- SQL_ - префикс (SQL Server)
-- Latin1_General - языковые правила (латиница)
-- CP1 - кодовая страница (1252)
-- CI - Case Insensitive (нечувствительность к регистру)
-- AS - Accent Sensitive (чувствительность к акцентам)
-- Использует правила Windows
-- Пример: Latin1_General_CI_AS
-- Унаследованные правила SQL Server
-- Пример: SQL_Latin1_General_CP1_CI_AS
Суффикс | Значение | Пример |
---|---|---|
_CI | Case Insensitive (регистр) | A = a |
_CS | Case Sensitive (регистр) | A ≠ a |
_AI | Accent Insensitive (акценты) | é = e |
_AS | Accent Sensitive (акценты) | é ≠ e |
_KS | Kana Sensitive (японская кана) | カ ≠ ガ |
_WS | Width Sensitive (ширина символов) | ア ≠ ア |
-- Все доступные collation
SELECT * FROM sys.fn_helpcollations();
-- Текущие настройки
SELECT SERVERPROPERTY('Collation') AS ServerCollation;
SELECT DATABASEPROPERTYEX('DBName', 'Collation') AS DBCollation;
CREATE DATABASE RussianDB
COLLATE Cyrillic_General_CI_AS;
ALTER TABLE Customers
ALTER COLUMN LastName NVARCHAR(50)
COLLATE Cyrillic_General_CS_AS;
SELECT Name
FROM Products
WHERE Name COLLATE Latin1_General_CS_AS = 'Chaos';
-- Ошибка: Cannot resolve the collation conflict
SELECT * FROM TableA A
JOIN TableB B ON A.Name = B.Name -- Разные collation
Решение:
SELECT * FROM TableA A
JOIN TableB B ON A.Name COLLATE DATABASE_DEFAULT = B.Name COLLATE DATABASE_DEFAULT
Для русского языка:
Для мультиязычных систем:
Для веб-приложений:
CREATE DATABASE WebApp COLLATE Latin1_General_100_CI_AS_SC_UTF8;
Collation в SQL Server:
Правильный выбор collation обеспечивает: