Типы данных CHAR и
VARCHAR очень схожи между
собой, но различаются по способам
их хранения и извлечения.
В столбце типа CHAR длина
поля постоянна и задается при
создании таблицы. Эта длина может
принимать любое значение между
1 и 255 (что же
касается версии MySQL 3.23, то в ней
длина столбца CHAR может
быть от 0 до
255). Величины типа
CHAR при хранении
дополняются справа пробелами до
заданной длины. Эти концевые
пробелы удаляются при извлечении
хранимых величин.
Величины в столбцах
VARCHAR представляют собой
строки переменной длины. Так же
как и для столбцов CHAR,
можно задать столбец
VARCHAR любой длины между
1 и 255. Однако,
в противоположность CHAR,
при хранении величин типа
VARCHAR используется
только то количество символов,
которое необходимо, плюс один
байт для записи длины. Хранимые
величины пробелами не
дополняются, наоборот, концевые
пробелы при хранении удаляются
(описанный процесс удаления
пробелов отличается от
предусмотренного спецификацией
ANSI SQL).
Если задаваемая в столбце
CHAR или VARCHAR
величина превосходит максимально
допустимую длину столбца, то эта
величина соответствующим образом
усекается.
Различие между этими двумя типами
столбцов в представлении
результата хранения величин с
разной длиной строки в столбцах
CHAR(4) и VARCHAR(4)
проиллюстрировано следующей
таблицей:
| Величина | CHAR(4) |
Требуемая память | VARCHAR(4) |
Требуемая память |
'' |
' ' |
4 байта | '' |
1 байт |
'ab' |
'ab ' |
4 байта | 'ab' |
3 байта |
'abcd' |
'abcd' |
4 байта | 'abcd' |
5 байтов |
'abcdefgh' |
'abcd' |
4 байта | 'abcd' |
5 байтов |
Извлеченные из столбцов
CHAR(4) и VARCHAR(4)
величины в каждом случае будут
одними и теми же, поскольку при
извлечении концевые пробелы из
столбца CHAR удаляются.
Если при создании таблицы не был
задан атрибут BINARY для
столбцов, то величины в столбцах
типа CHAR и VARCHAR
сортируются и сравниваются без
учета регистра. При задании
атрибута BINARY величины в
столбце сортируются и
сравниваются с учетом регистра в
соответствии с порядком таблицы
ASCII на том компьютере, где
работает сервер MySQL. Атрибут
BINARY не влияет на
процессы хранения или извлечения
данных из столбца.
Атрибут BINARY является
``прилипчивым''. Это значит, что,
если в каком-либо выражении
использовать столбец, помеченный
как BINARY, то сравнение
всего выражения будет
выполняться как сравнение
величины типа BINARY.
MySQL может без предупреждения
изменить тип столбца CHAR
или VARCHAR во время
создания таблицы. See
Раздел 6.5.3.1, «Молчаливые изменения определений столбцов».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
