Содержание
MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории:
- Числовые типы данных.
- Типы данных для хранения даты и времени.
- Символьные (строковые) типы данных.
Ниже перечислены только некоторые типы столбцов. На сайте phpclub.ru
есть полный список типов данных, поддерживаемых MySQL.
Квадратные скобки ([ ]) указывают для необязательных признаков.
Примечание: если для столбца указать параметр ZEROFILL
, то MySQL будет автоматически добавлять в этот столбец атрибут UNSIGNED
.В скобках указан максимально допустимый размер вывода M составляет 255 символов.
Числовые типы данных
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Очень малое целое число. Диапазон со знаком от -128
до 127
. Диапазон без знака от до
255
.
BIT, BOOL
Являются синонимами для TINYINT(1)
.
SMALLINT[(M)]
[UNSIGNED] [ZEROFILL]
Малое целое число. Диапазон со знаком от -32768
до 32767
. Диапазон без знака от до
65535
.
MEDIUMINT[(M)]
[UNSIGNED] [ZEROFILL]
Целое число среднего размера. Диапазон со знаком от -8388608
до 8388607
. Диапазон без знака от до
16777215
.
INT[(M)] [UNSIGNED] [ZEROFILL]
Целое число нормального размера. Диапазон со знаком от -2147483648
до 2147483647
. Диапазон без знака от до
4294967295
.
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Синоним для INT
.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Большое целое число. Диапазон со знаком от -9223372036854775808
до 9223372036854775807
. Диапазон без знака от до
18446744073709551615
.
Типы данных для хранения даты и времени
DATE
Дата. Поддерживается интервал от '1000-01-01'
до '9999-12-31'
. MySQL выводит значения DATE
в формате 'YYYY-MM-DD'
, но можно установить значения в столбец DATE
, используя как строки, так и числа.
Символьные (строковые) типы данных
[NATIONAL] CHAR(M) [BINARY]
Строка фиксированной длины, при хранении всегда дополняется пробелами в конце строки до заданного размера. Диапазон аргумента M
составляет от до
255
символов (от 1
до 255
в версиях, предшествующих MySQL 3.23). Концевые пробелы удаляются при выводе значения. Если не задан атрибут чувствительности к регистру BINARY
, то величины CHAR
сортируются и сравниваются как независимые от регистра в соответствии с установленным по умолчанию алфавитом.
Атрибут NATIONAL CHAR
(или его эквивалентная краткая форма NCHAR
) представляет собой принятый в ANSI SQL способ указания, что в столбце CHAR
должен использоваться установленный по умолчанию набор символов (CHARACTER
). В MySQL это принято по умолчанию. CHAR
является сокращением от CHARACTER
. MySQL позволяет создавать столбец типа CHAR(0)
.
В основном это полезно, если необходимо обеспечить совместимость с некоторыми старыми приложениями, которые зависят от наличия столбца, но реально эту величину не используют. Кроме того, такая возможность может очень пригодиться в случае, если необходим столбец, который может содержать только 2 значения, а именно CHAR(0)
(т. е. столбец, который не определен как NOT NULL
, занимает только один бит и принимает только 2 значения: NULL
или ""
).
CHAR
Это синоним для CHAR(1)
.
VARCHAR(M) [BINARY]
Строка переменной длины.
Примечание: концевые пробелы удаляются при сохранении значения (в этом заключается отличие от спецификации ANSI SQL). Диапазон аргумента M
составляет от 0 до 255 символов (от 1 до 255 в версиях, предшествующих MySQL Version 4.0.2). Если не задан атрибут чувствительности к регистру BINARY, то величины VARCHAR
сортируются и сравниваются как независимые от регистра. Термин VARCHAR
является сокращением от CHARACTER VARYING
.
TINYBLOB, TINYTEXT
Столбец типа BLOB
или TEXT
с максимальной длиной 255 (2^8 - 1)
символов.
BLOB, TEXT
Столбец типа BLOB
или TEXT
с максимальной длиной 65535 (2^16 - 1)
символов.
MEDIUMBLOB, MEDIUMTEXT
Столбец типа BLOB
или TEXT
с максимальной длиной 16777215 (2^24 - 1)
символов.
LONGBLOB, LONGTEXT
Столбец типа BLOB
или TEXT
с максимальной длиной 4294967295 (2^32 — 1) символов. Следует учитывать, что в настоящее время протокол передачи данных сервер/клиент и таблицы MyISAM имеют ограничение 16 Мб на передаваемый пакет/строку таблицы, поэтому пока нельзя использовать этот тип данных в его полном диапазоне.
Типы данных CHAR и VARCHAR
Типы данных CHAR
и VARCHAR
очень схожи между собой, но различаются по
способам их хранения и извлечения.
В столбце типа CHAR
длина поля постоянна и задается при создании таблицы.
Эта длина может принимать любое значение между 1
и 255
(что же касается
версии MySQL 3.23, то в ней длина столбца CHAR
может быть от до
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
во
время создания таблицы.