SQL-сервер NCHAR

В этом руководстве вы узнаете, как использовать тип данных SQL Server NCHAR для хранения строковых данных фиксированной длины в кодировке Unicode.

Для хранения строковых данных Unicode фиксированной длины в базе данных используется тип данных SQL Server NCHAR:

NCHAR(n)

В этом синтаксисе n указывает длину строки в диапазоне от 1 до 4000. Размер хранения значения NCHAR составляет два раза по n байт.

Синонимы ISO для NCHAR — NATIONAL CHAR и NATIONAL CHARACTER, поэтому их можно использовать взаимозаменяемо.

Подобно типу данных CHAR, вы используете NCHAR только для хранения строки символов фиксированной длины. Если длины значений данных являются переменными, вам следует рассмотреть возможность использования типа данных VARCHAR или NVARCHAR.

CHAR против NCHAR

Ниже приведены основные различия между типами данных CHAR и NCHAR.

ЧАР

НЧАР

Сохраняйте только символы, не входящие в кодировку Unicode. Сохраняйте символы Unicode в виде символов UNICODE UCS-2.
Для хранения символа нужен 1 байт Для хранения символа необходимо 2 байта.
Размер хранилища равен размеру, указанному в определении столбца или объявлении переменной. Размер хранилища равен удвоенному размеру, указанному в определении столбца или объявлении переменной.
Сохранение до 8000 символов. Сохранение до 4000 символов.

Пример SQL Server NCHAR

Следующий оператор создает новую таблицу с одним столбцом NCHAR:

CREATE TABLE test.sql_server_nchar(
    val NCHAR(1) NOT NULL
);

Следующий оператор INSERT вставляет символ a(あ) в японском языке в столбец NCHAR:

INSERT INTO test.sql_server_nchar(val)
VALUES
   (N'あ');

Обратите внимание, что перед константами строк символов Unicode необходимо ставить букву N. В противном случае SQL Server преобразует строку в кодовую страницу базы данных по умолчанию, которая может не распознать некоторые определенные символы Unicode.

Если вставить строку символов, длина которой превышает длину, указанную в определении столбца, SQL Server выдаст ошибку и завершит выполнение оператора.

Например, следующий оператор пытается вставить строку с двумя символами в столбец val таблицы test.sql_server_nchar:

INSERT INTO test.sql_server_nchar(val)
VALUES
   (N'いえ'); 

SQL Server выдал следующее сообщение об ошибке:

String or binary data would be truncated.
The statement has been terminated. 

Чтобы найти количество символов и количество байтов значений столбца val, используйте функции LEN и DATALENGTH следующим образом:

SELECT
    val,
    len(val) length,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nchar;

Пример типа данных SQL Server NCHAR

В этом руководстве вы узнали, как использовать тип данных SQL Server NCHAR для хранения строк символов Unicode фиксированной длины в базе данных.

Мирослав С.

Автор статей, ИБ-специалист