Основные типы данных в 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 поддерживаются пространственные типы данных, рассмотрение которых остаётся за рамками данной статьи.