SQL-сервер NVARCHAR

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

Обзор типа данных SQL Server NVARCHAR

Тип данных SQL Server NVARCHAR используется для хранения строковых данных Unicode переменной длины. Ниже показан синтаксис NVARCHAR:

NVARCHAR(n)

В этом синтаксисе n определяет длину строки в диапазоне от 1 до 4000. Если длина строки не указана, ее значение по умолчанию равно 1.

Другой способ объявить столбец NVARCHAR — использовать следующий синтаксис:

NVARCHAR(max)

В этом синтаксисе max — максимальный размер хранилища в байтах, который составляет 2^31-1 байт(2 ГБ).

Как правило, фактический размер хранимого значения NVARCHAR в байтах в два раза превышает количество введенных символов плюс 2 байта.

Синонимы ISO для NVARCHAR — NATIONAL CHAR VARYING или NATIONAL CHARACTER VARYING, поэтому их можно использовать взаимозаменяемо при объявлении переменной или определении данных столбца.

VARCHAR против NVARCHAR

В следующей таблице показаны основные различия между типами данных VARCHAR и NVARCHAR:

ВАРЧАР

НВАРЧАР
Тип данных символа Символы переменной длины, не входящие в Unicode Символы переменной длины, как в кодировке Unicode, так и в кодировке, отличной от Unicode, например, японские, корейские и китайские.
Максимальная длина До 8000 символов До 4000 символов
Размер символа Занимает 1 байт на символ Занимает 2 байта на символ Unicode/не Unicode
Размер хранилища Фактическая длина(в байтах) В 2 раза больше фактической длины(в байтах)
Использование Используется, когда длина данных является переменной или столбцы имеют переменную длину, и если фактические данные всегда намного меньше емкости Поскольку он предназначен только для хранения, используйте его только в том случае, если вам нужна поддержка Unicode, например, для японских символов кандзи или корейских символов хангыль.

Пример SQL Server NVARCHAR

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

CREATE TABLE test.sql_server_nvarchar(
    val NVARCHAR NOT NULL
);

В этом примере длина строки столбца NVARCHAR по умолчанию равна единице.

Чтобы изменить длину строки столбца val, используйте оператор ALTER TABLE ALTER COLUMN:

ALTER TABLE test.sql_server_Nvarchar 
ALTER COLUMN val NVARCHAR(10) NOT NULL;

Следующий оператор вставляет новую строку в столбец val таблицы test.sql_server_nvarchar:

INSERT INTO test.sql_server_varchar(val)
VALUES
   (N'こんにちは');

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

Следующий оператор пытается вставить новую строку данных, длина которой больше длины строки столбца val:

INSERT INTO test.sql_server_nvarchar(val)
VALUES
   (N'ありがとうございました');

SQL Server выдал ошибку и завершил выполнение оператора:

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

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

SELECT
    val,
    LEN(val) len,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nvarchar;

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

Мирослав С.

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