Кодировка символов SQL Server по умолчанию
по умолчанию - каков набор кодировок для базы данных в Microsoft SQL Server?
Как я могу увидеть текущую кодировку символов в SQL Server?
5 ответов
Если вам нужно знать параметры сортировки по умолчанию для вновь созданной базы данных:
SELECT SERVERPROPERTY('Collation')
это параметры сортировки сервера для экземпляра SQL Server, который выполняется.
кодировок
SQL Server хранит данные Unicode (т. е. то, что находится в XML
и N
-типы с префиксами) в UCS-2 / UTF-16 (хранилище то же самое, UTF-16 просто правильно обрабатывает дополнительные символы). Это не настраивается: нет возможности использовать UTF-8 или UTF-32. Могут ли встроенные функции правильно обрабатывать дополнительные символы и правильно ли они сортируются и сравниваются, зависит от используемой сортировки. Более старые сортировки приравнивают все дополнительные символы друг к другу. Начиная с SQL Server 2005 они представили 90
сортировки серии (те, с _90_
в названии), который мог бы, по крайней мере, выполнить двоичное сравнение дополнительных символов, чтобы вы могли различать их, даже если они не сортировались в нужном порядке. Что же касается 100
параметры сортировки серии, представленные в SQL Server 2008. SQL Server 2012 представил параметры сортировки с именами, заканчивающимися на _SC
которые не только сортируют дополнительные символы должным образом, но и позволяют встроенным функциям интерпретировать их как ожидалось (т. е. рассматривать суррогатную пару как одну сущность). Начиная с SQL Server 2017, все новые параметры сортировки () неявно поддерживают дополнительные символы, следовательно, нет новых сопоставлений с именами, заканчивающимися на _SC
.
данные, отличные от Unicode (т. е. те, которые находятся в CHAR
, VARCHAR
и TEXT
типы - но не используйте TEXT
используйте VARCHAR(MAX)
вместо этого) использует 8-битную кодировку (расширенный ASCII, DBCS или EBCDIC). Конкретный набор символов / кодировка основана на кодовой странице, которая в свою очередь основана на сортировки столбца, или сортировки текущей базы данных для литералов и переменных, или сортировки экземпляра для имен переменных / курсоров и GOTO
этикетки, или то, что указано в COLLATE
предложение, если оно используется.
чтобы увидеть, как совпадают локали до сортировки, проверьте:
чтобы увидеть кодовую страницу, связанную с определенной сортировкой (это набор символов и влияет только на CHAR
/ VARCHAR
/ TEXT
data), выполните следующие действия:
SELECT COLLATIONPROPERTY( 'Latin1_General_100_CI_AS' , 'CodePage' ) AS [CodePage];
чтобы увидеть LCID (т. е. locale), связанный с определенной сортировкой (это влияет на правила сортировки и сравнения), запустите следующее:
SELECT COLLATIONPROPERTY( 'Latin1_General_100_CI_AS' , 'LCID' ) AS [LCID];
чтобы просмотреть список доступных параметров сортировки, а также связанные с ними Lcid и кодовые страницы, выполните:
SELECT [name],
COLLATIONPROPERTY( [name], 'LCID' ) AS [LCID],
COLLATIONPROPERTY( [name], 'CodePage' ) AS [CodePage]
FROM sys.fn_helpcollations()
ORDER BY [name];
по умолчанию
прежде чем рассматривать параметры сортировки по умолчанию сервера и базы данных, следует понять относительную важность этих значений по умолчанию.
сервер (экземпляр, действительно) параметры сортировки по умолчанию используются по умолчанию для вновь созданных баз данных (включая системные базы данных: master
, model
, msdb
и tempdb
). Но это не означает, что любая база данных (кроме 4 системных DBs) использует эти параметры сортировки. Параметры сортировки базы данных по умолчанию могут быть изменены в любое время. Параметры сортировки по умолчанию сервера, однако, не так легко изменить. Параметры сортировки сервера / экземпляра:
- имена локальных переменных
- имена курсоров
- метки goto
параметры сортировки базы данных по умолчанию используются в двух пути:
- по умолчанию для вновь созданных столбцов строк. Но это не означает, что какой-либо строковый столбец использует эти параметры сортировки. Параметры сортировки столбца могут быть изменены в любое время. Здесь знание значения по умолчанию базы данных важно как указание на то, что столбцы строк, скорее всего, установлены.
- как параметры сортировки для операций, включающих строковые литералы, переменные и встроенные функции, которые не принимают строковые входы, но производят строковый выход (т. е.
IF (@InputParam = 'something')
). Здесь знание значения по умолчанию базы данных определенно важно, поскольку оно определяет, как будут вести себя эти операции.
параметры сортировки столбцов либо указаны в COLLATE
пункт во время CREATE TABLE
или ALTER TABLE {table_name} ALTER COLUMN
, или если не указано, берется из базы данных по умолчанию.
поскольку здесь есть несколько слоев, где можно указать параметры сортировки (база данных по умолчанию / столбцы / литералы и переменные), результирующая сортировка определяется by Очередность Параметров Сортировки.
все сказанное, следующий запрос показывает настройки по умолчанию / текущие для ОС, экземпляра SQL Server и указанной базы данных:
SELECT os_language_version,
---
SERVERPROPERTY('LCID') AS 'Instance-LCID',
SERVERPROPERTY('Collation') AS 'Instance-Collation',
SERVERPROPERTY('ComparisonStyle') AS 'Instance-ComparisonStyle',
SERVERPROPERTY('SqlSortOrder') AS 'Instance-SqlSortOrder',
SERVERPROPERTY('SqlSortOrderName') AS 'Instance-SqlSortOrderName',
SERVERPROPERTY('SqlCharSet') AS 'Instance-SqlCharSet',
SERVERPROPERTY('SqlCharSetName') AS 'Instance-SqlCharSetName',
---
DATABASEPROPERTYEX(N'{database_name}', 'LCID') AS 'Database-LCID',
DATABASEPROPERTYEX(N'{database_name}', 'Collation') AS 'Database-Collation',
DATABASEPROPERTYEX(N'{database_name}', 'ComparisonStyle') AS 'Database-ComparisonStyle',
DATABASEPROPERTYEX(N'{database_name}', 'SQLSortOrder') AS 'Database-SQLSortOrder'
FROM sys.dm_os_windows_info;
обновление 2018-10-02
хотя это еще не жизнеспособный вариант, SQL Server 2019 вводит встроенную поддержку UTF-8 в VARCHAR
/ CHAR
типы данных. В настоящее время с ним слишком много ошибок для его использования, но если они исправлено, то это опция для некоторые сценарии. Пожалуйста, посмотрите мой пост".--96-->собственная поддержка UTF-8 в SQL Server 2019: спаситель или лжепророк?", для детального анализа этой новой функции.
кодировка символов по умолчанию для базы данных SQL Server iso_1, которая является ISO 8859-1. Обратите внимание, что кодировка зависит от типа данных столбца. Вы можете получить представление о том, какие кодировки символов используются для столбцов в базе данных, а также параметры сортировки с помощью этого SQL:
select data_type, character_set_catalog, character_set_schema, character_set_name, collation_catalog, collation_schema, collation_name, count(*) count
from information_schema.columns
group by data_type, character_set_catalog, character_set_schema, character_set_name, collation_catalog, collation_schema, collation_name;
если он использует значение по умолчанию, character_set_name должен быть iso_1 для типов данных char и varchar. Поскольку nchar и nvarchar хранят данные Unicode в формате UCS-2, character_set_name для этих типов данных-UNICODE.
Я думаю, что это достойно отдельного ответа: хотя внутренние данные unicode хранятся как UTF-16 в Sql Server, это маленький Эндианский аромат, поэтому, если вы вызываете базу данных из внешней системы, вам, вероятно, нужно указать UTF-16LE.