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

Использованные материалы