Кодировка символов 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: спаситель или лжепророк?", для детального анализа этой новой функции.


SELECT DATABASEPROPERTYEX('DBName', 'Collation') SQLCollation;

где DBName-имя вашей базы данных.


кодировка символов по умолчанию для базы данных 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.