Типы данных
TODO!: не обработаны ссылки
- стр.785
- на mysql.ru
Тип | Применение | Размер |
---|---|---|
TINYINT | целые числа самой маленькой разрядности | Диапазон чисел со знаком: –128 … 127 , без знака unsigned – 0 … 255 |
SMALLINT | целые числа маленькой разрядности | Диапазон чисел со знаком: –32768 … 32767 , без знака – 0 … 65535 |
MEDIUMINT | целые числа средней разрядности | Диапазон чисел со знаком: –8388608 … 8388607 , без знака – 0 … 16777215 |
INT или INTEGER | целые числа обыкновенной разрядности | Диапазон чисел со знаком: ‘‘–2147483648’’ … 2147483647 , без знака – 0 … 4294967295 |
BIGINT | целые числа большой разрядности | Диапазон чисел со знаком: –9223372036854775808 … 9223372036854775807 , без знака – 0 … 18446744073709551615 |
FLOAT | числа с плавающей запятой (одинарной точности) | Диапазон от –3.402823466E+38 до –1.175494351E-38 и от 1.175494351E-38 до 3.402823466E+38 |
DOUBLE, REAL | числа с плавающей запятой (двойной точности) | Диапазон от -1.7976931348623157E+308 до -2.2250738585072014E-308 и от 2.2250738585072014E-308 до 1.7976931348623157E+308 |
DATE | дата | Диапазон от 1000-01-01 до 9999-12-31 , отображается в виде YYYY-MM-DD |
DATETIME | комбинация даты и времени | Диапазон от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 , отображается в виде YYYY-MM-DD HH:MM:SS |
TIMESTAMP | временная отметка | Диапазон от 1970-01-01 00:00:00 до 2037 года, отображается в виде YYYYMMDDHHMMSS или YYMMDDHHMMSS или YYYYMMDD или YYMMDD |
TIME | время | Диапазон от –838:59:59 до 838:59:59 , отображается в виде HH:MM:SS |
YEAR | год (2-х или 4-х циферное представление) | Диапазон от 1901 до ‘‘2155’’ (для 4-х циферного представления) и 1970-2069 (70-69 , для 2-х циферного представление), отображается в виде YYYY |
CHAR | строка фиксированной длины | link Диапазон от 1 до 255 символов, пробелы по краям обрезаются при получении значения, заполняется пробелом до заданной длины (если символов меньше, чем заданная длина), сортировка и сравнение значений регистро-независимое |
VARCHAR | строка изменяющийся длины | link Диапазон от 1 до 255 символов, пробелы по краям обрезаются при сохранении, сортировка и сравнение значений регистро-независимое |
TINYBLOB, TINYTEXT | столбец типа BLOB (с учетом регистра) или TEXT (регистронезависимый), максимальная длина 255 символов |
|
BLOB, TEXT | подробнее | столбец типа BLOB или TEXT , максимальная длина 65535 символов |
MEDIUMBLOB, MEDIUMTEXT | столбец типа BLOB или TEXT , максимальная длина 16777215 символов |
|
LONGBLOB, LONGTEXT | столбец типа BLOB или TEXT , максимальная длина 4294967295 символов |
|
ENUM | перечисление | link строковый объект, может иметь только одно значение из списка, максимальное количество уникальных элементов – 65535 Если объявлено, что столбец ENUM разрешает NULL, значение NULL является допустимым значением для столбца и значение по умолчанию — NULL. Если столбец ENUM объявлен NOT NULL, его значением по умолчанию является первый элемент списка разрешенных значений. |
SET | множество | строковый объект, может иметь 0 или больше значений из списка, максимальное количество элементов – 64 |
Длина для наглядности
10 | 1234567890
20 | 1234567891234567890
30 | 12345678912345678901234567890
40 | 123456789123456789012345678901234567890
50 | 1234567891234567890123456789012345678901234567890
60 | 12345678912345678901234567890123456789012345678901234567890
70 | 123456789123456789012345678901234567890123456789012345678901234567890
80 | 1234567891234567890123456789012345678901234567890123456789012345678901234567890
90 | 12345678912345678901234567890123456789012345678901234567890123456789012345678901234567890
00 | 123456789123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
Требования к памяти для числовых типов
Тип столбца | Требуемая память |
TINYINT | 1 byte |
SMALLINT | 2 байта |
MEDIUMINT | 3 байта |
INT | 4 байта |
INTEGER | 4 байта |
BIGINT | 8 байтов |
FLOAT(X) | 4, если X <= 24 или 8, если 25 <= X <= 53 |
FLOAT | 4 байта |
DOUBLE | 8 байтов |
DOUBLE PRECISION | 8 байтов |
REAL | 8 байтов |
DECIMAL(M,D) | M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D) |
NUMERIC(M,D) | M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D) |
Требования к памяти для типов даты и времени
Тип столбца | Требуемая память |
DATE | 3 байта |
DATETIME | 8 байтов |
TIMESTAMP | 4 байта |
TIME | 3 байта |
YEAR | 1 байт |
http://www.mysql.ru/docs/mysql-man-4.0-ru/reference.html#date-and-time-types
TIMESTAMP
Тип столбца TIMESTAMP
обеспечивает тип представления данных, который можно использовать для автоматической записи текущих даты и времени при выполнении операций INSERT
или UPDATE
. При наличии нескольких столбцов типа TIMESTAMP
только первый из них обновляется автоматически.
Автоматическое обновление первого столбца с типом TIMESTAMP
происходит при выполнении любого из следующих условий:
- Столбец не указан явно в команде
INSERT
илиLOAD DATA IN
. - Столбец не указан явно в команде
UPDATE
, и при этом изменяется величина в некотором другом столбце (следует отметить, что командаUPDATE
, устанавливающая столбец в то же самое значение, которое было до выполнения команды, не вызовет обновления столбцаTIMESTAMP
, поскольку в целях повышения производительности MySQL игнорирует подобные обновления при установке столбца в его текущее значение). - Величина в столбце
TIMESTAMP
явно установлена вNULL
.
Для остальных (кроме первого) столбцов типа TIMESTAMP также можно задать установку в значение текущих даты и времени. Для этого необходимо просто установить столбец в NULL
или в NOW()
.
Любой столбец типа TIMESTAMP
(даже первый столбец данного типа) можно установить в значение, отличное от текущих даты и времени. Это делается путем явной установки его в желаемое значение. Данное свойство можно использовать, например, если необходимо установить столбец TIMESTAMP
в значение текущих даты и времени при создании строки, а при последующем обновлении этой строки значение столбца не должно изменяться:
- Пусть MySQL автоматически установит значение столбца с типом
TIMESTAMP
при создании данной строки. Столбец будет установлен в исходное состояние со значением текущих даты и времени. - При выполнении последующих обновлений других столбцов в данной строке необходимо явно установить столбец
TIMESTAMP
в его текущее значение.
Однако, с другой стороны, для этих целей, возможно, будет проще использовать столбец DATETIME
. При создании строки его следует инициализировать функцией NOW()
и оставить в покое при последующих обновлениях.
Величины типа TIMESTAMP
могут принимать значения от начала 1970 года до некоторого значения в 2037 году с разрешением в одну секунду. Эти величины выводятся в виде числовых значений.
Формат данных, в котором MySQL извлекает и показывает величины TIMESTAMP
, зависит от количества показываемых символов. Это проиллюстрировано в приведенной ниже таблице. Полный формат TIMESTAMP
составляет 14 десятичных разрядов, но можно создавать столбцы типа TIMESTAMP
и с более короткой строкой вывода:
Тип столбца | Формат вывода |
---|---|
TIMESTAMP(14) | YYYYMMDDHHMMSS |
TIMESTAMP(12) | YYMMDDHHMMSS |
TIMESTAMP(10) | YYMMDDHHMM |
TIMESTAMP(8) | YYYYMMDD |
TIMESTAMP(6) | YYMMDD |
TIMESTAMP(4) | YYMM |
TIMESTAMP(2) | YY |
Независимо от размера выводимого значения размер данных, хранящихся в столбцах типа TIMESTAMP
, всегда один и тот же. Чаще всего используется формат вывода с 6, 8, 12 или 14 десятичными знаками. При создании таблицы можно указать произвольный размер выводимых значений, однако если этот размер задать равным 0 или превышающим 14, то будет использоваться значение 14. Нечетные значения размеров в интервале от 1 до 13 будут приведены к ближайшему большему четному числу.
Требования к памяти для символьных типов
Тип столбца | Требуемая память |
CHAR(M) | M байт, 1 <= M <= 255 |
VARCHAR(M) | L+1 байт, где L <= M и 1 <= M <= 255 |
TINYBLOB, TINYTEXT | L+1 байт, где L < 2^8 |
BLOB, TEXT | L+2 байт, где L < 2^16 |
MEDIUMBLOB, MEDIUMTEXT | L+3 байт, где L < 2^24 |
LONGBLOB, LONGTEXT | L+4 байт, где L < 2^32 |
ENUM('value1','value2',...) | 1 или 2 байт, в зависимости от количества перечисляемых величин (максимум 65535) |
SET('value1','value2',...) | 1, 2, 3, 4 или 8 байт, в зависимости от количества элементов множества (максимум 64) |
VARCHAR, BLOB и TEXT являются типами данных с переменной длиной строки, для таких типов требования к памяти в общем случае определяются реальным размером величин в столбце (представлен символом L в приведенной выше таблице), а не максимально возможным для данного типа размером. Например, столбец VARCHAR(10) может содержать строку с максимальной длиной 10 символов. Реально требуемый объем памяти равен длине строки (L) плюс 1 байт для записи длины строки. Для строки ‘abcd’ L равно 4 и требуемый объем памяти равен 5 байтов. В случае типов данных BLOB и TEXT требуется 1, 2, 3 или 4 байта для записи длины значения данного столбца в зависимости от максимально возможной длины для данного типа. Если таблица включает в себя столбец какого-либо типа с переменной длиной строки, то формат записи также будет переменной длины. Следует учитывать, что при создании таблицы MySQL может при определенных условиях преобразовать тип столбца с переменной длиной в тип с постоянной длиной строки или наоборот. Размер объекта ENUM определяется количеством различных перечисляемых величин. Один байт используется для перечисления до 255 возможных величин. Используя два байта, можно перечислить до 65535 величин. Размер объекта SET определяется количеством различных элементов множества. Если это количество равно N, то размер объекта вычисляется по формуле (N+7)/8 и полученное число округляется до 1, 2, 3, 4 или 8 байтов. Множество SET может иметь максимум 64 элемента.
YEAR
Тип YEAR
- это однобайтный тип данных для представления значений года.
MySQL извлекает и выводит величины YEAR
в формате YYYY
. Диапазон возможных значений - от 1901 до 2155.
Величины типа YEAR
могут быть заданы в различных форматах:
- Как четырехзначная строка в интервале значений от ‘1901’ до ‘2155’.
- Как четырехзначное число в интервале значений от 1901 до 2155.
- Как двухзначная строка в интервале значений от ‘00’ до ‘99’. Величины в интервалах от ‘00’ до ‘69’ и от ‘70’ до ‘99’ при этом преобразуются в величины YEAR в интервалах от 2000 до 2069 и от 1970 до 1999 соответственно.
- Как двухзначное число в интервале значений от 1 до 99. Величины в интервалах от 1 до 69 и от 70 до 99 при этом преобразуются в величины YEAR в интервалах от 2001 до 2069 и от 1970 до 1999 соответственно. Необходимо принять во внимание, что интервалы для двухзначных чисел и двухзначных строк несколько различаются, так как нельзя указать “ноль” непосредственно как число и интерпретировать его как 2000. Необходимо задать его как строку ‘0’ или ‘00’, или же оно будет интерпретировано как 0000.
- Как результат выполнения функции, возвращающей величину, приемлемую в контексте типа данных
YEAR
(такой как NOW()).
Недопустимые величины YEAR
преобразуются в 0000.
http://yapro.ru/web-master/mysql/tipi-poley-v-mysql.html