Типы данных MySQL
Что такое тип данных
1. Тип данных указывает конкретный тип данных, например, целое число, число с плавающей запятой, логическое значение и т. Д.
2. Тип данных также определяет возможные значения для этого типа, операции, которые могут быть выполнены с этим типом, и способ хранения значений этого типа.
Типы данных MySQL
MySQL поддерживает несколько стандартных типов данных SQL в различных категориях. MySQL имеет числовые типы, типы DATETIME , DATE и TIMESTAMP и строковые типы. Типы данных, обсуждаемые на этой странице, основаны на сервере сообщества MySQL 5.6.
Числовые типы MySQL
MySQL поддерживает все стандартные числовые типы данных SQL, включая INTEGER, SMALLINT, DECIMAL и NUMERIC. Он также поддерживает приблизительные числовые типы данных (FLOAT, REAL и DOUBLE PRECISION). Ключевое слово INT является синонимом INTEGER, а ключевые слова DEC и FIXED являются синонимами DECIMAL. DOUBLE - это синоним DOUBLE PRECISION (нестандартное расширение). REAL является синонимом DOUBLE PRECISION (нестандартный вариант), если не включен режим SQL REAL_AS_FLOAT. Тип данных BIT хранит значения битовых полей и поддерживается для таблиц MyISAM, MEMORY, InnoDB и NDB.
Целочисленные типы
Стандартные целочисленные типы SQL INTEGER (или INT) и SMALLINT поддерживаются MySQL. В качестве расширения к стандарту MySQL также поддерживает целочисленные типы TINYINT, MEDIUMINT и BIGINT. В следующей таблице показано требуемое хранилище и диапазон (максимальное и минимальное значение для целого числа со знаком и без знака) для каждого типа целого числа.
Тип | длина в байтах | Минимальное значение (Подпись) | Максимальное значение (Подпись) | Минимальное значение (Без знака) | Максимальное значение (Без знака) |
---|---|---|---|---|---|
TINYINT | 1 | -128 | 127 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 до | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8 | -9223372036854775808 | 92233720368 54775807 | 0 | 184467440737 09551615 |
Типы с плавающей точкой
Типы FLOAT и DOUBLE представляют приблизительные числовые значения данных. MySQL использует четыре байта для значений одинарной точности и восемь байтов для значений двойной точности.
Типы | Описание |
---|---|
FLOAT | Точность от 0 до 23 приводит к четырехбайтовому столбцу FLOAT одинарной точности |
DOUBLE | Точность от 24 до 53 приводит к восьмибайтовому столбцу двойной точности DOUBLE. |
MySQL допускает нестандартный синтаксис: FLOAT (M, D) или REAL (M, D) или DOUBLE PRECISION (M, D). Здесь значения могут храниться в сумме до M цифр, где D представляет десятичную точку. Например, столбец, определенный как FLOAT (8,5), будет выглядеть как -999,999999. MySQL выполняет округление при сохранении значений, поэтому, если вы вставите 999.00009 в столбец FLOAT (7,4), приблизительный результат будет 999.0001.
В следующей таблице показано необходимое хранилище и диапазон (максимальное и минимальное значение для целого числа со знаком и без знака) для каждого типа с плавающей запятой.
Тип | длина в байтах | Минимальное значение (Подпись) | Максимальное значение (Подпись) | Минимальное значение (Без знака) | Максимальное значение (Без знака) |
---|---|---|---|---|---|
FLOAT | 4 | -3.402823466E + 38 | -1.175494351E-38 | 1.175494351E-38 | 3.402823466E + 38 |
DOUBLE | 8 | -1,7976931348623 157E + 308 | -2,22507385850720 14E- 308 | 0 и +2,22507385850720 14E- 308 | +1,797693134862315 7E + 308 |
Типы с фиксированной точкой
Типы данных с фиксированной точкой используются для сохранения точной точности, например, с валютными данными. В MySQL типы DECIMAL и NUMERIC хранят точные числовые значения данных. MySQL 5.6 сохраняет значения DECIMAL в двоичном формате.
В стандартном SQL синтаксис DECIMAL (5,2) (где 5 - точность, а 2 - масштаб.) Может хранить любое значение с пятью цифрами и двумя десятичными знаками. Поэтому диапазон значений будет от -999,99 до 999,99. Синтаксис DECIMAL ( M ) эквивалентен DECIMAL ( M , 0). Аналогично, синтаксис DECIMAL эквивалентен DECIMAL ( M , 0). MySQL поддерживает обе эти разновидности синтаксиса DECIMAL. По умолчанию значение M равно 10. Если масштаб равен 0, значения DECIMAL не содержат десятичной точки или дробной части.
Максимальное количество цифр для DECIMAL составляет 65, но фактический диапазон для данного столбца DECIMAL может быть ограничен точностью или масштабом для данного столбца.
Типы битовых значений
Тип данных BIT используется для хранения значений битовых полей. Тип BIT (N) позволяет хранить N-битные значения. N может варьироваться от 1 до 64.
Чтобы указать битовые значения, можно использовать обозначение b'value. значение - это двоичное значение, записанное с использованием нулей и единиц. Например, b'111 'и b'10000000' представляют 7 и 128 соответственно
Атрибуты числового типа
MySQL поддерживает расширение для необязательного указания ширины отображения целочисленных типов данных в скобках после ключевого слова base для типа
Типы | Описание |
---|---|
ТИП (N) | Где N - целое число, а ширина отображения типа - до N цифр. |
ZEROFILL | Заполнение пробелов по умолчанию заменяется нулями. Так, для столбца INT (3) ZEROFILL 7 отображается как 007. |
MySQL Date and Time Types
Типы даты и времени представляют собой ДАТУ, ВРЕМЯ, DATETIME, TIMESTAMP и YEAR. Каждый тип имеет диапазон допустимых значений, а также «нулевое» значение.
DATETIME, DATE и TIMESTAMP Типы
Типы | Описание | Формат отображения | Спектр |
---|---|---|---|
DATETIME | Используйте, когда вам нужны значения, содержащие информацию о дате и времени. | ГГГГ-ММ-ДД ЧЧ: ММ: СС | '1000-01-01 00:00:00' до '9999-12-31 23:59:59'. |
ДАТА | Используйте, когда вам нужна только информация о дате. | YYYY-MM-DD | «1000-01-01» - «9999-12-31». |
TIMESTAMP | Значения преобразуются из текущего часового пояса в UTC при сохранении и преобразуются обратно из UTC в текущий часовой пояс при получении. | ГГГГ-ММ-ДД ЧЧ: ММ: СС | '1970-01-01 00:00:01' UTC до '2038-01-19 03:14:07' UTC |
Тип времени
MySQL извлекает и отображает значения ВРЕМЕНИ в формате «ЧЧ: ММ: СС» или «ЧЧЧ: ММ: СС». Диапазон. ВРЕМЕНИ значения от -838: 59: 59 до 838: 59: 59. Часть часов может быть довольно большой, потому что не только тип ВРЕМЯ может использоваться для представления времени суток, то есть менее 24 часов, но также прошедшее время или время интервала между двумя событиями.
Значения ВРЕМЕНИ в MySQL можно распознать во многих различных форматах, некоторые из которых могут включать в себя конечную долю доли секунды с точностью до 6 цифр в микросекундах. Диапазон значений TIME: от -838: 59: 59.000000 до 838: 59: 59.000000.
MySQL объясняет сокращенные значения ВРЕМЕНИ двоеточиями как время суток. Предположим, «09: 10» означает «09: 10: 00», а не «00: 09: 10». MySQL понимает сокращенные значения без двоеточий, так как две самые правые цифры представляют секунды. Например, мы думаем, что «0910» и «0910» означают «09: 10: 00», то есть через 10 минут после 9 часов, но реальность такова, что MySQL понимает их как «00: 09: 10», то есть 9 минут и 10 секунд. Поэтому будьте осторожны с использованием сокращенного времени в MySQL.
По умолчанию значения времени, которые находятся вне TIME, преобразуются в допустимый диапазон значений времени. Например, «-930: 00: 00» и «930: 00: 00» преобразуются в «-838: 59: 59» и «838: 59: 59». Недопустимые значения TIME преобразуются в «00: 00: 00», потому что «00: 00: 00» само по себе является допустимым значением «TIME» в MySQL.
Тип года
Тип YEAR - это однобайтовый тип, используемый для представления значений года. Он может быть объявлен как YEAR (2) или YEAR (4), чтобы указать ширину отображения двух или четырех символов. Если ширина не указана, по умолчанию используется четыре символа
ГОД (4) и ГОД (2) имеют разный формат отображения, но имеют одинаковый диапазон значений.
Для 4-значного формата MySQL отображает значения YEAR в формате YYYY в диапазоне от 1901 до 2155 или 0000.
Для двухзначного формата MySQL отображает только последние две (наименее значимые) цифры; например, 70 (1970 или 2070) или 69 (2069).
Вы можете указать значения YEAR в различных форматах:
Длина строки | Спектр |
---|---|
4-значная строка | С 1901 по 2155. |
4-значный номер | С 1901 по 2155 год |
1- или 2-значная строка | От 0 до 99 Значения в диапазонах от «0» до «69» и от «70» до «99» преобразуются в значения ГОД в диапазонах с 2000 по 2069 и с 1970 по 1999 год. |
1- или 2-значное число | От 1 до 99. Значения в диапазонах от 1 до 69 и от 70 до 99 преобразуются в значения ГОДА в диапазонах с 2001 по 2069 и с 1970 по 1999 год. |
Типы строк
Типы строк: CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM и SET.
Типы CHAR и VARCHAR
Типы CHAR и VARCHAR похожи, но отличаются тем, как они хранятся и извлекаются. Они также различаются по максимальной длине и сохранению задних пробелов.
Типы | Описание | Формат отображения | Диапазон символов |
---|---|---|---|
CHAR | Содержит недвоичные строки. Длина фиксируется, как вы объявляете при создании таблицы. При сохранении они дополняются правыми пробелами до указанной длины. | Конечные пробелы удалены. | Длина может быть любым значением от 0 до 255. |
VARCHAR | Содержит недвоичные строки. Столбцы являются строками переменной длины. | Как хранится. | Значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65 535 в 5.0.3 и более поздних версиях. |
Двоичные и варварские типы
Типы BINARY и VARBINARY похожи на CHAR и VARCHAR, за исключением того, что они содержат двоичные строки, а не недвоичные строки.
Типы | Описание | Диапазон в байтах |
---|---|---|
BINARY | Содержит двоичные строки. | От 0 до 255 |
VARBINARY | Содержит двоичные строки. | Значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65 535 в 5.0.3 и более поздних версиях. |
Типы BLOB и TEXT
BLOB - это большой двоичный объект, который может содержать переменное количество данных. Существует четыре типа BLOB, TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB. Они отличаются только максимальной длиной значений, которые они могут содержать.
Четырьмя типами TEXT являются TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT. Они соответствуют четырем типам BLOB и имеют одинаковую максимальную длину и требования к хранению.
Типы | Описание | категории | Спектр |
---|---|---|---|
большой двоичный объект | Большой двоичный объект, содержащий переменное количество данных. Значения обрабатываются как двоичные строки. Вам не нужно указывать длину при создании столбца. | TINYBLOB | Максимальная длина 255 символов. |
MEDIUMBLOB | Максимальная длина 16777215 символов. | ||
LONGBLOB | Максимальная длина 4294967295 символов | ||
ТЕКСТ | Значения обрабатываются как строки символов, имеющие набор символов. | TINYBLOB | Максимальная длина 255 символов. |
MEDIUMBLOB | Максимальная длина 16777215 символов. | ||
LONGBLOB | Максимальная длина 4294967295 символов |
Типы ENUM
Строковый объект, значение которого выбирается из списка значений, указанных во время создания таблицы. Например -
CREATE TABLE length ( length ENUM('small', 'medium', 'large') );
Типы SET
Строковый объект, имеющий ноль или более значений, разделенных запятыми (максимум 64). Значения выбираются из списка значений, указанных во время создания таблицы.
Разница между типами данных MySQL Datetime и Timestamp
Тип DATETIME используется, когда вам нужны значения, содержащие информацию как даты, так и времени. MySQL извлекает и отображает значения DATETIME в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС». Поддерживаемый диапазон: от 1000-01-01 от 00:00:00 до 9999-12-31 23:59:59.
Тип данных TIMESTAMP также используется, когда вам нужны значения, содержащие информацию как о дате, так и о времени. У TIMESTAMP есть диапазон от «1970-01-01 00:00:01» UTC до «2038-01-19 03:14:07» UTC
Основное различие между DATETIME и TIMESTAMP заключается в том, что значения TIMESTAMP при сохранении преобразуются из текущего часового пояса в UTC и при получении возвращаются из UTC в текущий часовой пояс. Значение типа данных datetime не изменяется.
Смотрите следующий пример:
Следующая команда отображает информацию о текущем часовом поясе:
Давайте создадим таблицу с двумя полями udatetime (тип данных -> datetime) utimestamp (тип данных -> timestamp) и вставим одну запись с now () (возвращает текущую дату и время) в качестве значения в обоих полях.
MySQL> create table tempdate (udatetime datetime, utimestamp timestamp);
Query OK, 0 rows affected (0.32 sec)
MySQL> insert into tempdate values ((now()), (now()));
Query OK, 1 row affected (0.05 sec)
Теперь посмотрите записи;
На этом этапе типы данных datetime и timestamp имеют одинаковые значения.
В приведенном выше выводе оба поля имеют одинаковые значения. Давайте изменим часовой пояс и увидим результат.
MySQL> SET TIME_ZONE ='Europe/Paris';
Query OK, 0 rows affected (0.00 sec)
Теперь выполните следующую команду:
Пример вывода:
MySQL> select * from tempdate; + --------------------- + --------------------- + | время | метка времени | + --------------------- + --------------------- + | 2013-06-29 16:55:18 | 2013-06-29 13:25:18 | + --------------------- + --------------------- + 1 ряд в наборе (0,00 сек)
Приведенный выше вывод показывает, что udatetime (тип данных - DATETIME) не изменяется, тогда как utimestamp (тип данных - TIMESTAMP) изменяется, поскольку для нового часового пояса установлено значение «Европа / Париж».
Описание: типы данных MySQL
Предыдущая: Структура языка MySQL
Далее: Расширения MySQL для пространственных данных
Новый контент: Composer: менеджер зависимостей для PHP , R программирования