Основные типы данных в MySQL
Содержание
Целочисленные типы
У целочисленных типов можно указать дополнительные свойства:
- в круглых скобках вслед за типом (кроме типа
BOOL
илиBOOLEAN
) можно указать количество цифр M, которое будет использоваться при отображении числа, - вслед за типом можно указать ключевое слово
UNSIGNED
, которое сделает число беззнаковым и поменяет диапазон возможных значений, - также вслед за типом можно указать ключевое слово
FILLZERO
, которое предписывает при отображении числа дополнять его слева до нужного количества цифр M не пробелами, а нулями.
TINYINT
Один байт. Целое число со знаком с возможными значениями от -128 до 127 или целое число без знака с возможными значениями от 0 до 255.
SMALLINT
Два байта. Целое число со знаком с возможными значениями от -32768 до 32767 или целое число без знака с возможными значениями от 0 до 65535.
MEDIUMINT
Три байта. Целое число со знаком с возможными значениями от -8388608 до 8388607 или целое число без знака с возможными значениями от 0 до 16777215.
INT или INTEGER
Четыре байта. Целое число со знаком с возможными значениями от -2147483648 до 2147483647 или целое число без знака с возможными значениями от 0 до 4294967295.
BIGINT
Восемь байт. Целое число со знаком с возможными значениями от -9223372036854775808 до 9223372036854775807 или целое число без знака с возможными значениями от 0 до 18446744073709551615.
Типы с фиксированной запятой
У чисел с фиксированной запятой можно указать дополнительные свойства:
- в круглых скобках вслед за типом можно указать общее количество цифр М в числе. Также через запятую после M можно указать количество цифр после запятой D. Знак минуса и десятичной точки не входят в общее количество цифр M.
- вслед за типом можно указать ключевое слово
UNSIGNED
, которое запретит записывать в поле отрицательные числа, - также вслед за типом можно указать ключевое слово
FILLZERO
, которое предписывает при отображении числа дополнять его слева до нужного количества цифр M не пробелами, а нулями.
DECIMAL, DEC, NUMERIC, FIXED
От одного до 8 байт. По 4 байта на 9 цифр. M может принимать значения от 1 до 65, по умолчанию - 10. D может принимать значения от 0 до 30, по умолчаиню - 0.
Типы с плавающей запятой
Числа с плавающей запятой хранятся в формате IEEE 754. У них можно указать дополнительные свойства:
- в круглых скобках вслед за типом можно указать общее количество цифр М в числе и через запятую после M указать количество цифр после запятой В. Знак минуса и десятичной точки не входят в общее количество цифр M. Если M и D не указаны, то сохраняются любые допустимые форматом числа,
- вслед за типом можно указать ключевое слово
UNSIGNED
, которое запретит записывать в поле отрицательные числа, - также вслед за типом можно указать ключевое слово
FILLZERO
, которое предписывает при отображении числа дополнять его слева до нужного количества цифр M не пробелами, а нулями.
FLOAT
32-битное число, занимает 4 байта. Может принимать отрицательные значения от -3.402823466E+38 до -1.175494351E-38, 0 и положительные значения от 1.175494351E-38 до 3.402823466E+38. Точность представления примерно соответствует 7 цифрам.
DOUBLE или DOUBLE PRECISION
64-битное число, занимает 8 байт. Может принимать отрицательные значения от -1.7976931348623157E+308 до -2.2250738585072014E-308, 0 и положительные значения от 2.2250738585072014E-308 до 1.7976931348623157E+308. Точность представления примерно соответствует 15 цифрам.
FLOAT(p)
Число с плавающей запятой, где p указывает на точность в битах. При значениях p от 0 до 24 используется FLOAT
без указания M и D. При значениях от 25 до 53 используется DOUBLE
без указания M и D.
REAL
Если в sql_mode
указано REAL_AS_FLOAT
, то синоним для FLOAT
, в противном случае - синоним для DOUBLE
.
Типы для дат и времени
Для форматов времени в скобках можно указать точность - количество цифр после запятой D от 0 до 6. Цифры хранятся по две в одном байте.
DATE
3 байта. Дата в формате 'ГГГГ-ММ-ДД'
TIME
От 3 до 6 байт. Время в формате 'ЧЧ:ММ:СС'. Для версий MySQL, начиная с 5.6.4, может также присутствовать дробная часть от 1 до 6 цифр, которые хранятся в дополнительных байтах по две цифры в одном байте.
DATETIME
От 5 до 8 байт. Отметка времени календарная в формате 'ГГГГ-ММ-ДД ЧЧ:мм:СС', одинаковая во всех часовых поясах. В MySQL до версии 5.6.4 поле занимает 8 байт, без дробной части. Для версий MySQL, начиная с 5.6.4, поле занимает 5 байт, а также может также присутствовать дробная часть от 1 до 6 цифр, которые хранятся в дополнительных байтах по две цифры в одном байте.
TIMESTAMP
От 4 до 7 байт. Отметка времени по текущему часовому поясу клиента в формате 'ГГГГ-ММ-ДД ЧЧ:мм:СС', при сохранении пересчитывается в часовой пояс нулевого мередиана, при чтении пересчитывается в часовой пояс клиента. Для версий MySQL, начиная с 5.6.4, поле занимает 4 байта, а также может также присутствовать дробная часть от 1 до 6 цифр, которые хранятся в дополнительных байтах по две цифры в одном байте.
YEAR
1 байт. Год в формате ГГГГ.
Двоичные типы
Двоичные типы хранят последовательности байт. В круглых скобках после типа можно указать максимальное количество байт, которое может храниться в поле.
BINARY или CHAR BYTE
Последовательность фиксированной длины из M байт от 0 до 255, по умолчанию 1.
VARBINARY
Последовательность байт переменной длины не больше M байт, где M может принимать значения от 0 до 65535. Для хранения поля длины при M от 0 до 255 байт используется 1 байт, а при M от 256 до 65535 - два байта.
TINYBLOB
Последовательность байт переменной длины не больше 255 байт, длина последовательности сохраняется вместе с полем как один байт.
BLOB
Последовательность байт переменной длины не больше M байт, где M может принимать значения от 0 до 65535. Длина строки сохраняется вместе с полем как два байта.
MEDIUMBLOB
Последовательность байт переменной длины не больше M байт, где M может принимать значения от 0 до 16777215. Длина строки сохраняется вместе с полем как три байта.
LONGBLOB
Последовательность байт переменной длины не больше M байт, где M может принимать значения от 0 до 4294967295. Длина строки сохраняется вместе с полем как четрые байта. Практически размер последовательности ограничен размером пакета max_allowed_packet
и объёмом оперативной памяти.
Текстовые типы
Текстовые типы хранят последовательности символов. Базируются они на типах для хранения последовательностей байт. У них можно указать дополнительные свойства:
- в круглых скобках вслед за типом можно указать максимальное количество символов M, которое для однобайтовых кодировок совпадает с максимальным количеством байтов, которое может вместить соответствующий двоичный тип. Если используется многобайтовая кодировка, то для хранения одного символа может потребоваться больше одного байта, из-за чего максимально допустимое количество символов будет ниже, чем в случае с однобайтовой кодировкой,
- с помощью ключевых слов
CHARACTER SET
можно указать кодировку символов. Ключевое словоASCII
равнозначноCHARACTER SET latin1
, ключевое словоUNICODE
равнозначноCHARACTER SET ucs2
, - с помощью ключевого слова
COLLATE
можно указать правила сортировки последовательностей символов. Ключевое словоBINARY
равнозначно правилу сортировки, название которого образовано из имени кодировки, указанной вCHARACTER SET
и суффикса_bin
.
CHAR или CHARACTER
Строка символов фиксированной длины из M символов, по умолчанию - 1. Если символов меньше, то справа добавляются пробелы. Если M равно 0, то можно сохранить только пустую строку, что может иметь смысл для достижения совместимости или в сочетании с атрибутом NULL, когда кроме пустой строки в поле можно сохранить ещё и значение NULL
.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля BINARY
.
VARCHAR или CHARACTER VARYING
Строка символов переменной длины из максимум M символов. Для хранения поля длины при M от 0 до 255 символов используется 1 байт, а при M от 256 до 65535 - два байта.
При указании кодировки CHARACTER SET utf8
максимальное значение M уменьшается до 21844 символов.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля VARBINARY
.
NVARCHAR или NATIONAL VARCHAR
То же самое, что и VARCHAR
или CHARACTER VARYING
, но с CHARACTER SET utf8
.
TINYTEXT
Строка символов переменной длины не больше 255 символов или меньше при использовании многобайтовых кодировок.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля TINYBLOB
.
TEXT
Строка символов перменной длины не больше M символов. Длина строки сохраняется вместе с полем как два байта.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля BLOB
.
MEDIUMTEXT
Строка символов перменной длины не больше M символов. Длина строки сохраняется вместе с полем как три байта.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля MEDIUMBLOB
.
LONGTEXT
Строка символов перменной длины не больше M символов. Длина строки сохраняется вместе с полем как четыре байта.
При указании кодировки CHARACTER SET binary
тип становится эквивалентным типу поля LONGBLOB
.
Другие типы
BIT
От одного до восьми байт, в зависимости от M. Битовое поле из M бит, где M от 1 до 64, по умолчанию - 1. Вместе с ним удобно использовать значения вида b'101'.
BOOL или BOOLEAN
Синоним для TINYINT(1), для значений 1 и 0 предусмотрены псевдонимы TRUE
и FALSE
соответственно.
ENUM('value1', 'value2', ...)
Один или два байта. Одно из перечисленных значений: value1
, value2
. В одной таблице может быть не больше 255 уникальных перечислений или значений множеств.
SET('value1', 'value2', ...)
1, 2, 3, 4 или 8 байт. Множество, содержащее не более 64 предопределённых значений. В одной таблице может быть не больше 255 уникальных перечислений или значений множеств.
Также в MySQL поддерживаются пространственные типы данных, рассмотрение которых остаётся за рамками данной статьи.