Типы char и varchar (Transact-SQL)

Являются строковыми типами данных фиксированной или переменной длины.

  • char [ ( n ) ]
    Строковые данные фиксированной длины не в Юникоде. Аргумент n определяет длину строки, он должен быть значением от 1 до 8000. Размер при хранении составляет n байт. Если кодовая страница параметров сортировки использует двухбайтовые символы, размер хранения остается равным n байт. В зависимости от строки, размер для хранения в n байт может быть меньше значения, указанного для аргумента n. Синонимом по стандарту ISO для типа char является character.

  • varchar [ ( n | max ) ]
    Строковые данные переменной длины не в Юникоде. Аргумент n определяет длину строки, он может быть значением в диапазоне от 1 до 8000. max указывает, что максимальный размер для хранения равен 2^31-1 байт (2 ГБ). Размер хранения (в байтах) — это значение фактической длины введенных данных плюс 2 байта. Синонимами по стандарту ISO для типа varchar являются типы charvarying или charactervarying.

Замечания

Если аргумент n не указан в определении данных или инструкции объявления переменной, длина по умолчанию равна 1. Если аргумент n не указан при использовании функции CAST или CONVERT, длина по умолчанию равна 30.

Объектам, использующим тип char или varchar, назначаются параметры сортировки по умолчанию базы данных, если только не задан специальный режим при помощи предложения COLLATE. Параметры сортировки контролируют кодовую страницу, используемую для хранения символьных данных.

Если имеются сайты, поддерживающие несколько языков, то для уменьшения проблем, связанных с преобразованием символов, рассмотрите использование типов данных Юникода nchar или nvarchar. Если используется тип char или varchar, рекомендуется следующий подход.

  • Если размеры записей данных столбцов постоянны, используйте char.

  • Если размеры записей данных столбцов значительно изменяются, используйте varchar.

  • Если размеры записей данных столбцов значительно изменяются и размер может превысить 8 000 байт, используйте varchar(max).

Если SET ANSI_PADDING равно OFF при выполнении CREATE TABLE или ALTER TABLE, столбец char, определенный как NULL, обрабатывается как varchar.

Примеры

А. Демонстрация значения по умолчанию n при использовании в объявлении переменной

В следующем примере показано, что значение по умолчанию n равно 1 для типов данных char и varchar, если они используются в объявлении переменной.

DECLARE @myVariable AS varchar = 'abc', @myNextVariable AS char = 'abc';
--The following returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO

Б. Демонстрация значения по умолчанию n при использовании функций CAST и CONVERT типа данных varchar.

В следующем примере показано, что значение по умолчанию n равно 30, если типы данных char или varchar используются с функциями CAST и CONVERT.

DECLARE @myVariable AS varchar(40) = 'This string is longer than thirty characters';
SELECT CAST(@myVariable AS varchar);
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';
SELECT CONVERT(char, @myVariable);
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';