SQL Server: набор символов (не параметры сортировки)
Как установить набор символов по умолчанию для полей при создании таблиц в SQL Server? В MySQL один делает это:
CREATE TABLE tableName (
name VARCHAR(128) CHARACTER SET utf8
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
обратите внимание, что я установил набор символов дважды здесь. Это излишне, я добавил оба способа, чтобы просто продемонстрировать.
установить параметры сортировки также показать, что обобщение-это нечто другое. Я не вопрос о настройке сортировки. большинство вопросы спрашивать о наборах символов и кодировки в SQL Server отвечают сортировкой, которая является не то же самое.
2 ответов
каждая сортировка SQL Server задает три свойства:
- порядок сортировки, используемый для типов данных Unicode (nchar, nvarchar и ntext). Порядок сортировки определяет последовательность символов сортировка и способ вычисления символов в операциях сравнения.
- порядок сортировки, используемый для символьных типов данных, отличных от Юникода (char, varchar и text).
- код страница, используемая для хранения символьных данных, отличных от Unicode.
цитата выше из 2000 документов. см. Также эту ссылку 2008. Ниже также показано это.
DECLARE @T TABLE
(
code TINYINT PRIMARY KEY,
Arabic_CS_AS CHAR(1) COLLATE Arabic_CS_AS NULL,
Cyrillic_General_CS_AS CHAR(1) COLLATE Cyrillic_General_CS_AS NULL,
Latin1_General_CS_AS CHAR(1) COLLATE Latin1_General_CS_AS NULL
);
INSERT INTO @T(code) VALUES (200),(201),(202),(203),(204),(205)
UPDATE @T
SET Arabic_CS_AS=CAST(code AS BINARY(1)),
Cyrillic_General_CS_AS=CAST(code AS BINARY(1)),
Latin1_General_CS_AS=CAST(code AS BINARY(1))
SELECT *
FROM @T
результаты
code Arabic_CS_AS Cyrillic_General_CS_AS Latin1_General_CS_AS
---- ------------ ---------------------- --------------------
200 ب И È
201 ة Й É
202 ت К Ê
203 ث Л Ë
204 ج М Ì
205 ح Н Í
чтобы расширить ответ @Martin:
способ установки "набора символов" в SQL Server зависит от используемого типа данных. Если вы используете:
NVARCHAR
,NCHAR
иNTEXT
(NTEXT
устарел и не должен использоваться с SQL Server 2005) все используют набор символов Unicode, и это не может быть изменено. Все эти типы данных кодируются как UTF-16 LE (Little Endian) - 16-битная кодировка с каждым "символом", равным 2 или 4 байтам - и это тоже нельзя изменить. Для этих типов данных используемая сортировка влияет только на локаль (определяемую LCID сортировки), которая определяет набор правил, используемых для сортировки и сравнения.XML
, какN
-типы с префиксами, использует набор символов Юникода и кодируется как UTF-16 LE (Little Endian), и ни один из них не может быть изменен. Но в отличие от других строковых типов данных, нет параметров сортировки, связанных сXML
данные, поскольку они не могут быть отсортированы или сопоставлены (по крайней мере, без предварительного преобразования вNVARCHAR(MAX)
[крупный] илиVARCHAR(MAX)
).-
VARCHAR
,CHAR
иTEXT
(TEXT
устарел и не должен использоваться с SQL Server 2005)-все 8-битные кодировки с каждым "символом", равным 1 или 2 байтам. Набор символов определяется кодовой страницей, связанной с каждым параметром сортировки. Правила сортировки и сравнения зависят от типа сортировки используется:- параметры сортировки SQL Server: все они имеют имена, начинающиеся с
SQL_
и устарели с SQL Server 2000, хотя (к сожалению) все еще широко используются сегодня. Они используют простые правила, указанные как номер "порядок сортировки SQL Server", как найдено в на @Мартин:к сожалению, они выбрали вводящий в заблуждение / неполный термин "сортировка", который явно относится к порядку сортировки: collate определение.
хотя это правда, что Microsoft могла бы сделать лучше при выборе имени, К сожалению, существует общая, общепромышленная путаница в отношении таких терминов, как "кодировка", "набор символов", "сопоставление" и т. д. Использование Microsoft (или неправильное использование) "сортировки" просто способствовало массовой путанице. Но эта путаница также очевидна в MySQL, как показано в этом вопросе, учитывая, что" utf8 " специально не набор символов ;-).
UTF-8 является одним из нескольких кодировок для набора символов Unicode. UTF-16 и UTF-32 являются двумя другими кодировками. Все три эти кодировки представляют собой один и тот же набор символов Юникода, только по-разному. Глядя на список наборов символов MySQL -11.1.10 поддерживаемые наборы символов и сортировки – в "ucs2", "utf8", то "utf8mb4", "формате UTF16", "utf16le", "кодировках utf32" кодировки фактически не кодировки, как таковой, но различные представления Набор символов Юникода. Но, учитывая перекрытие между понятиями "набор символов" и "кодировка", было бы трудно не иметь этой путаницы. The 11.1.10.1 Наборы Символов Юникода страница указывает, что "utf8mb4", "формате UTF16", "utf16le", и "кодировках utf32" наборы символов полный Юникод кодировок, а "ucs2" и "utf8" являются подмножествами набор символов Unicode, в частности, первый 65,536 кодов пунктов (.к.а. Основной многоязычной плоскости (bmp)).
дополнительные информация о сортировке по различным СУБД, пожалуйста, см. Мой ответ на следующий вопрос о DBA.Клиент StackExchange:
имеет ли какая-либо СУБД параметры сортировки, чувствительные как к регистру, так и к акценту?
обновление 2018-10-02
хотя это еще не жизнеспособный вариант, SQL Server 2019 вводит встроенную поддержку UTF-8 в
VARCHAR
/CHAR
типы данных. В настоящее время слишком много ошибок с ним для него для использования, но если они исправлены, то это опция для некоторые сценарии. Пожалуйста, посмотрите мой пост".--93-->собственная поддержка UTF-8 в SQL Server 2019: спаситель или лжепророк?", для детального анализа этой новой функции.
- параметры сортировки SQL Server: все они имеют имена, начинающиеся с