# Типи даних

* [Data Types in MySQL: Tutorial and Full List with Examples of Data Formats](https://blog.devart.com/mysql-data-types.html)
* [на mysql.ru](http://www.mysql.ru/docs/mysql-man-4.0-ru/reference.html#column-types)

<table><thead><tr><th width="180.33333333333334">Тип</th><th width="217">Применение</th><th>Размер</th></tr></thead><tbody><tr><td>TINYINT</td><td>целые числа самой маленькой разрядности</td><td>Диапазон чисел со знаком: <code>–128</code> ... <code>127</code>, без знака unsigned – <code>0</code> ... <code>255</code></td></tr><tr><td>SMALLINT</td><td>целые числа маленькой разрядности</td><td>Диапазон чисел со знаком: <code>–32768</code> ... <code>32767</code>, без знака – <code>0</code> ... <code>65535</code></td></tr><tr><td>MEDIUMINT</td><td>целые числа средней разрядности</td><td>Диапазон чисел со знаком: <code>–8388608</code> ... <code>8388607</code>, без знака – <code>0</code> ... <code>16777215</code></td></tr><tr><td>INT или INTEGER</td><td>целые числа обыкновенной разрядности</td><td>Диапазон чисел со знаком: ''–2147483648'' ... <code>2147483647</code>, без знака – <code>0</code> ... <code>4294967295</code></td></tr><tr><td>BIGINT</td><td>целые числа большой разрядности</td><td>Диапазон чисел со знаком: <code>–9223372036854775808</code> ... <code>9223372036854775807</code>, без знака – <code>0</code> ... <code>18446744073709551615</code></td></tr><tr><td>FLOAT</td><td>числа с плавающей запятой (одинарной точности)</td><td>Диапазон от <code>–3.402823466E+38</code> до <code>–1.175494351E-38</code> и от <code>1.175494351E-38</code> до <code>3.402823466E+38</code></td></tr><tr><td>DOUBLE, REAL</td><td>числа с плавающей запятой (двойной точности)</td><td>Диапазон от <code>-1.7976931348623157E+308</code> до <code>-2.2250738585072014E-308</code> и от <code>2.2250738585072014E-308</code> до <code>1.7976931348623157E+308</code></td></tr><tr><td>DATE</td><td>дата</td><td>Диапазон от <code>1000-01-01</code> до <code>9999-12-31</code>, отображается в виде <code>YYYY-MM-DD</code></td></tr><tr><td>DATETIME</td><td>комбинация даты и времени</td><td>Диапазон от <code>1000-01-01 00:00:00</code> до <code>9999-12-31 23:59:59</code>, отображается в виде <code>YYYY-MM-DD HH:MM:SS</code></td></tr><tr><td>TIMESTAMP</td><td>временная отметка</td><td>Диапазон от <code>1970-01-01 00:00:00</code> до 2037 года, отображается в виде <code>YYYYMMDDHHMMSS</code> или <code>YYMMDDHHMMSS</code> или <code>YYYYMMDD</code> или <code>YYMMDD</code></td></tr><tr><td>TIME</td><td>время</td><td>Диапазон от <code>–838:59:59</code> до <code>838:59:59</code>, отображается в виде <code>HH:MM:SS</code></td></tr><tr><td>YEAR</td><td>год (2-х или 4-х циферное представление)</td><td>Диапазон от <code>1901</code> до ''2155'' (для 4-х циферного представления) и <code>1970-2069</code> (<code>70-69</code>, для 2-х циферного представление), отображается в виде <code>YYYY</code></td></tr><tr><td>CHAR</td><td>строка фиксированной длины</td><td>link Диапазон от <code>1</code> до <code>255</code> символов, пробелы по краям обрезаются при получении значения, заполняется пробелом до заданной длины (если символов меньше, чем заданная длина), сортировка и сравнение значений регистро-независимое</td></tr><tr><td>VARCHAR</td><td>строка изменяющийся длины</td><td>link Диапазон от <code>1</code> до <code>255</code> символов, пробелы по краям обрезаются при сохранении, сортировка и сравнение значений регистро-независимое</td></tr><tr><td>TINYBLOB, TINYTEXT</td><td></td><td>столбец типа <code>BLOB</code> (с учетом регистра) или <code>TEXT</code> (регистронезависимый), максимальная длина <code>255</code> символов</td></tr><tr><td>BLOB, TEXT</td><td>подробнее</td><td>столбец типа <code>BLOB</code> или <code>TEXT</code>, максимальная длина <code>65535</code> символов</td></tr><tr><td>MEDIUMBLOB, MEDIUMTEXT</td><td></td><td>столбец типа <code>BLOB</code> или <code>TEXT</code>, максимальная длина <code>16777215</code> символов</td></tr><tr><td>LONGBLOB, LONGTEXT</td><td></td><td>столбец типа <code>BLOB</code> или <code>TEXT</code>, максимальная длина <code>4294967295</code> символов</td></tr><tr><td>ENUM</td><td>перечисление</td><td><a href="https://dev.mysql.com/doc/refman/8.0/en/enum.html">link</a> строковый объект, может иметь только одно значение из списка, максимальное количество уникальных элементов – <code>65535</code> Если объявлено, что столбец ENUM разрешает NULL, значение NULL является допустимым значением для столбца и значение по умолчанию — NULL. Если столбец ENUM объявлен NOT NULL, его значением по умолчанию является первый элемент списка разрешенных значений.</td></tr><tr><td>SET</td><td>множество</td><td>строковый объект, может иметь 0 или больше значений из списка, максимальное количество элементов – <code>64</code></td></tr><tr><td><a href="datatype/json">JSON</a></td><td>рядок у форматі JSON</td><td>автоматично валідується, не може мати<code>NOT NULL</code> значення за замовчуванням</td></tr></tbody></table>

### Нульовий формат значення для часових типів MySQL

MySQL дозволяє зберігати «нульове» значення «0000-00-00» як «фіктивну дату». У деяких випадках це зручніше, ніж використання значень NULL, і використовує менше даних та простору індексу. Ви можете зберігати або посилатися на них явно, використовуючи значення, наведені в таблиці. Ви можете також скористатися параметрами '0' або 0, які легше писати. Для тимчасових типів, що включають частину дати (DATE, DATETIME, and TIMESTAMP), використання цих значень може призвести до warning or errors. Точна поведінка залежить від того, який із суворих режимів і режимів SQL NO\_ZERO\_DATE увімкнено; see [Section 7.1.11, “Server SQL Modes”.](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html)

<table data-header-hidden><thead><tr><th width="261"></th><th></th></tr></thead><tbody><tr><td>Data Type</td><td>“Zero” Value</td></tr><tr><td><a href="https://dev.mysql.com/doc/refman/8.0/en/datetime.html"><code>DATE</code></a></td><td><code>'0000-00-00'</code></td></tr><tr><td><a href="https://dev.mysql.com/doc/refman/8.0/en/time.html"><code>TIME</code></a></td><td><code>'00:00:00'</code></td></tr><tr><td><a href="https://dev.mysql.com/doc/refman/8.0/en/datetime.html"><code>DATETIME</code></a></td><td><code>'0000-00-00 00:00:00'</code></td></tr><tr><td><a href="https://dev.mysql.com/doc/refman/8.0/en/datetime.html"><code>TIMESTAMP</code></a></td><td><code>'0000-00-00 00:00:00'</code></td></tr><tr><td><a href="https://dev.mysql.com/doc/refman/8.0/en/year.html"><code>YEAR</code></a></td><td><code>0000</code></td></tr></tbody></table>

«Нульові» значення дати або часу, які використовуються через Connector/ODBC, автоматично перетворюються на NULL, оскільки ODBC не може обробляти такі значення.

### Часові типи MariaDB

MariaDB зберігає значення, які використовують `DATETIME` у форматі, який підтримує значення між `1000-01-01 00:00:00.000000` і `9999-12-31 23:59:59.999999`.

MariaDB також може зберігати мікросекунди з точністю від 0 до 6. Якщо точність мікросекунд не вказана, за замовчуванням використовується 0.

MariaDB також підтримує «0000-00-00» як спеціальне значення нульової дати, якщо NO\_ZERO\_DATE не вказано в SQL\_MODE. Подібним чином окремі компоненти дати можуть мати значення 0 (наприклад: '2015-00-12'), якщо в SQL\_MODE не вказано NO\_ZERO\_IN\_DATE. У багатьох випадках результатом виразу en, що містить нульову дату або дату з нульовими частинами, є NULL. Якщо ALLOW\_INVALID\_DATES SQL\_MODE увімкнуто, якщо частина дня знаходиться в діапазоні від 1 до 31, дата не створює жодної помилки, навіть для місяців, які мають менше 31 дня.

### Для наочності

```
10 | 1234567890
20 | 1234567891234567890
30 | 12345678912345678901234567890
40 | 123456789123456789012345678901234567890
50 | 1234567891234567890123456789012345678901234567890
60 | 12345678912345678901234567890123456789012345678901234567890
70 | 123456789123456789012345678901234567890123456789012345678901234567890
80 | 1234567891234567890123456789012345678901234567890123456789012345678901234567890
90 | 12345678912345678901234567890123456789012345678901234567890123456789012345678901234567890
00 | 123456789123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
```

**Вимоги до пам’яті числових типів**

<table data-header-hidden><thead><tr><th width="242"></th><th></th></tr></thead><tbody><tr><td><strong>Тип</strong></td><td><strong>Необхідна пам’ять</strong></td></tr><tr><td>TINYINT</td><td>1 byte</td></tr><tr><td>SMALLINT</td><td>2 байта</td></tr><tr><td>MEDIUMINT</td><td>3 байта</td></tr><tr><td>INT</td><td>4 байта</td></tr><tr><td>INTEGER</td><td>4 байта</td></tr><tr><td>BIGINT</td><td>8 байтов</td></tr><tr><td>FLOAT(X)</td><td>4, если X &#x3C;= 24 или 8, если 25 &#x3C;= X &#x3C;= 53</td></tr><tr><td>FLOAT</td><td>4 байта</td></tr><tr><td>DOUBLE</td><td>8 байтов</td></tr><tr><td>DOUBLE PRECISION</td><td>8 байтов</td></tr><tr><td>REAL</td><td>8 байтов</td></tr><tr><td>DECIMAL(M,D)</td><td>M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M &#x3C; D)</td></tr><tr><td>NUMERIC(M,D)</td><td>M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M &#x3C; D)</td></tr></tbody></table>

### Требования к памяти для типов даты и времени

<table data-header-hidden><thead><tr><th width="297"></th><th></th></tr></thead><tbody><tr><td><strong>Тип столбца</strong></td><td><strong>Требуемая память</strong></td></tr><tr><td>DATE</td><td>3 байта</td></tr><tr><td>DATETIME</td><td>8 байтов</td></tr><tr><td>TIMESTAMP</td><td>4 байта</td></tr><tr><td>TIME</td><td>3 байта</td></tr><tr><td>YEAR</td><td>1 байт</td></tr></tbody></table>

### MariaDB Data Type Storage Requirements

[https://mariadb.com/kb/en/data-type-storage-requirements/](https://mariadb.com/kb/en/data-type-storage-requirements/)
