Поделиться через


char и varchar (Transact-SQL)

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

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

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

Замечания

Если n не задается в определении данных или в инструкции объявления переменной, длина по умолчанию равна 1. Если при использовании функций CAST и CONVERT n не задается, длина по умолчанию равна 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 символов может понадобиться менее n байт.

Примеры

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

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

DECLARE @myVariable AS varchar
DECLARE @myNextVariable AS char
SET @myVariable = 'abc'
SET @myNextVariable = '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)
SET @myVariable = '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';