Поиск

Типы CHAR и VARCHAR

Типы char и VARCHAR похожи, но отличаются способом сохранения и извлечения.
Длина столбца CHAR фиксирована и равна длине, которая указывается при создании таблицы. Она может иметь любое значение от 0 до 255 (до версии MySQL 3.23 длина CHAR могла быть от 1 до 255). При сохранении значение CHAR выравнивается за счет до­бавления пробелов справа до указанной длины столбца. Когда значение CHAR извлекает­ся, завершающие пробелы удаляются.
Значения, хранимые в столбцах VARCHAR, являются строками переменной длины. Вы можете объявить столбец VARCHAR с длиной от 0 до 255, так же, как и CHAR (до версии MySQL 3.23 длина VARCHAR могла быть от 1 до 255). Однако, в отличие от CHAR, в столб­це VARCHAR сохраняется столько знаков, сколько необходимо, плюс один байт для записи длины. Значение не дополняется пробелами, наоборот, завершающие пробелы удаляют­ся при сохранении. Это поведение отличается от стандартных спецификаций SQL.

При сохранении и извлечении никаких преобразований регистра не выполняется.
Если вы присваиваете столбцу CHAR или VARCHAR значение, превышающее его длину, оно усекается.
Если вам нужен столбец, для которого не выполняется удаление завершающих про­белов, рассмотрите возможность применения типов BLOB или TEXT. Если вы хотите со­хранять бинарные значения, такие как результаты, возвращаемые функциями сжатия или шифрования, которые могут содержать произвольные байты, используйте столбцы типа BLOB вместо CHAR или VARCHAR, дабы избежать потенциальных проблем с удалением пробелов, изменяющим данные.
В приведенной ниже табл. представлены различия между двумя типами столбцов, на примере результата сохранения строкового значения в столбцы CHAR (4) и VARCHAR (4).
Значения, извлеченные из столбцов CHAR (4) и VARCHAR (4), будут одинаковы в любом случае, поскольку завершающие пробелы удаляются при чтении.
Начиная с версии MySQL 4.1.0, значения столбцов CHAR и VARCHAR сортируются и сравниваются в соответствии с порядком сопоставления серверного набора символов. Вы можете объявить столбец с атрибутом BINARY, чтобы сделать сортировку и сравнения нечувствительными к регистру, используя коды хранящихся символов вместо лексико­графического порядка. Атрибут BINARY не влияет на то, как столбец сохраняется или извлекается.

Таблица Сохранение значений в столбцах CHAR (4) и VARCHAR(4)


Значение CHAR (4) Требует VARCHAR(4) Требует
1 Т

 

4 байта

' '

1 байт

'ab1

'ab '

4 байта

'ab'

3 байта

'abed'

•abed'

4 байта

'abed'

5 байт

'abedefgh'

'abed'

4 байта

'abed'

5 байт


Начиная с MySQL 4.1.0, тип столбца CHAR BYTE - это псевдоним для CHAR BINARY. Это сделано для совместимости.
Атрибут BINARY является жестким. Это означает, что если столбец, помеченный как BINARY, участвует в выражении, то все выражение становится BINARY.
Начиная с версии MySQL 4.1.0, для столбцов CHAR может быть указан атрибут ASCII. Это назначает столбцу набор символов latinl.
Начиная с MySQL 4.1.0, для столбцов CHAR может быть указан также атрибут UNICODE. Это назначает ему набор символов ucs2.
MySQL может молча изменить тип столбцов char или varchar при создании таблицы (см. раздел Неявные изменения спецификаций столбцов).