Spec-Zone.ru › MariaDB

Требования к хранению типов данных

В следующих таблицах указаны приблизительные требования к хранению каждого типа данных.

Числовые типы данных

Тип данных Требования к хранению
TINYINT 1 байт
SMALLINT 2 байта
MEDIUMINT 3 байта
INT 4 байта
BIGINT 8 байт
FLOAT(p) 4 байта, если p ≤ 24, иначе 8 байт
DOUBLE 8 байт
DECIMAL См. таблицу ниже
BIT(M) (M+7)/8 байт

Обратите внимание, что столбцы MEDIUMINT потребуют 4 байта в памяти (например, в кэше буфера InnoDB).

Десятичные

Десятичные значения хранятся в двоичном формате, причём целая и дробная части хранятся отдельно. Каждые девять цифр требуют 4 байта, а оставшиеся цифры — количество байтов, указанное ниже:

Остальные цифры Требования к хранению
0 0 байт
1 1 байт
2 1 байт
3 2 байта
4 2 байта
5 3 байта
6 3 байта
7 4 байта
8 4 байта

Строковые типы данных

В описаниях ниже, M — это объявленная длина столбца (в символах или байтах), а len — фактическая длина значения в байтах.

Тип данных Требования к хранению
ENUM 1 байт для до 255 значений перечисления, 2 байта для 256–65 535 значений перечисления
CHAR(M) M × w байт, где w — количество байт, необходимое для символа максимальной длины в наборе символов
BINARY(M) M байт
VARCHAR(M), VARBINARY(M) len + 1 байт, если столбец содержит 0–255 байт, len + 2 байта, если столбец может потребовать более 255 байт
TINYBLOB, TINYTEXT len + 1 байт
BLOB, TEXT len + 2 байта
MEDIUMBLOB, MEDIUMTEXT len + 3 байта
LONGBLOB, LONGTEXT len + 4 байта
SET При M членах множества (M+7)/8 байт, округляется до 1, 2, 3, 4 или 8 байт
INET6 16 байт
UUID 16 байт

В некоторых наборах символов не все символы используют одинаковое количество байт. utf8 кодирует символы от одного до трёх байт на символ, в то время как utf8mb4 требует от одного до четырёх байт на символ.

При использовании атрибута COMPRESSED, 1 байт зарезервирован для метаданных. Например, VARCHAR(255) будет использовать +2 байта вместо +1.

Примеры

Предполагая однобайтовый набор символов:

Значение CHAR(2) Требуемое хранение VARCHAR(2) Требуемое хранение
'' ' ' 2 байта '' 1 байт
'1' '1 ' 2 байта '1' 2 байта
'12' '12' 2 байта '12' 3 байта

Типы данных даты и времени

Тип данных Требования к хранению
DATE 3 байта
TIME 3 байта
DATETIME 8 байт
TIMESTAMP 4 байта
YEAR 1 байт

Микросекунды

MariaDB 5.3 и MySQL 5.6 добавили микросекунды. Реализации хранения отличались, но начиная с MariaDB 10.1, MariaDB использует формат MySQL (с помощью переменной mysql56_temporal_format). Микросекунды имеют следующие дополнительные требования к хранению:

MySQL 5.6+ и MariaDB 10.1+

Точность Требования к хранению
0 0 байт
1,2 1 байт
3,4 2 байта
5,6 3 байта

MariaDB 5.3 - MariaDB 10.0

Точность Требования к хранению
0 0 байт
1,2 1 байт
3,4,5 2 байта
6 3 байта

NULL

Для форматов строк InnoDB COMPACT, DYNAMIC и COMPRESSED, в заголовке записи выделяется количество байт для столбцов, которые могут принимать значение NULL. Если таких столбцов от 1 до 8, выделяется 1 байт. В области данных записи место не резервируется для значений NULL.

Для формата строк InnoDB REDUNDANT накладные расходы составляют 1 бит в заголовке записи (как часть 1-байтового или 2-байтового указателя «конец поля»). В этом формате столбец с типом NULL занимает такое же пространство, как и столбец с типом NOT NULL в области данных записи. Это связано с возможностью обновлять значения между NOT NULL и NULL.

В других форматах значения NULL обычно занимают 1 бит в файле данных и 1 байт в файле индексов.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется компанией MariaDB. Мнения, информация и мнения, выраженные в данном содержимом, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/data-type-storage-requirements/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API