Типы данных в MySQL — Timeweb Cloud
В процессе организации базы данных в MySQL пользователь должен определять каждому столбцу в таблице имя и тип данных. Данный процесс дает понять системе какие конкретно данные будут храниться в базе и как будут обрабатываться, а также определяет необходимый объем памяти для них.
Существует несколько основных классов типов данных таблиц MySQL. Среди них числовые, символьные, дата и время и другие.
Каждый из классов содержит в себе некоторое количество типов данных, которые по своему уникальны. Важно на начальном этапе создания таблицы правильно определить их во избежание проблем, которые могут появиться, когда цельная структура базы данных будет уже полностью готова.
В данной статье будут описаны все основные типы данных MySQL, их структура, допустимые значения и рекомендации к применению.
Преимущества работы MySQL в облаке
Облачные базы данных — это управляемый сервис, благодаря которому возможно организовать и автоматизировать правильную работу с базами данных в облаке.
Среди преимуществ использования MySQL в облаке можно выделить:
- Обслуживание и настройка баз данных со стороны сервиса;
- Обеспечение надежности, высокой доступности и отказоустойчивости;
- Автоматическое резервное копирование;
- Быстрое горизонтальное и вертикальное масштабирование;
- Бесперебойная работа за счет репликации кластера;
- Работы БД на вычислительных ресурсах облачной платформы.
Чтобы создать облачную базу данных, обратитесь к соответствующей инструкции в нашей базе знаний.
Числовые типы
MySQL допускает использование всех стандартных числовых типов данных SQL. Все они предназначены для хранения чисел. В данной статье будут рассмотрены такие числовые типы данных, как:
- целые числа;
- числа с плавающей точкой;
- числа с фиксированной точкой.
Более подробно о каждом из перечисленных числовых типов данных в MySQL будет рассказано ниже.
Целые числа
Предназначен для хранения знаковых целых чисел (signed), либо беззнаковых (unsigned). Первый позволяет хранить все числа, как со знаком «+», так и «-». Второй, в свою очередь, хранит только положительные числа, однако их диапазон увеличивается вдвое.
Существует всего 5 основных целых типов: TINYINT, SMALLINT, MEDIUMINT, INT и BIGINT. Основным различием между ними является диапазон хранимых значений. Чем он шире, тем больше необходимо выделять памяти для его хранения. Важно правильно определять нужный тип из всех возможных, чтобы правильно распределять ресурсы памяти при создании таблицы.
Перечень типов, их объем памяти и диапазон чисел представлены в таблице ниже.
Тип | Объем памяти (байты) | Диапазон чисел signed | Диапазон чисел unsigned |
TINYINT | 1 | От -27 до 27-1 | От 0 до 28-1 |
SMALLINT | 2 | От -215 до 215-1 | От 0 до 216-1 |
MEDIUMINT | 3 | От -223 до 223-1 | От 0 до 224-1 |
INT | 4 | От -231 до 231-1 | От 0 до 232-1 |
BIGINT | 8 | От -263 до 263-1 | От 0 до 264-1 |
Указание размера для целых чисел (например, MEDIUMINT (6)) не изменяет диапазон возможных значений. Это является справочно-сервисной информацией, которую используют некоторые инструменты для работы с MySQL. Данное указание лишь добавить пробелы слева от чисел, которые меньше заданной в скобках длины.
Также можно указать специальный атрибут ZEROFILL, который вместо пробелов поставил 0 на свободные позиции. Он не является обязательным, поэтому им возможно пользоваться только при надобности. Допустим, пользователь указал SMALLINT (8) ZEROFILL, тогда значение 256 будет отображаться в системе следующим образом: 00000256.
Числа с плавающей точкой
Предназначен для хранения приблизительных числовых значений. В MySQL можно определить что использовать для результирующего типа данных благодаря спецификации точности. Она не является обязательной и при необходимости указывает в скобках, как это показано ниже:
FLOAT (p)
p — точность, которая может принимать значения от 0 до 53. Если значение меньше 25, то будет выбран FLOAT() — одинарная точность, иначе DOUBLE() — двойная точность.
Тип | Объем памяти (байты) | Диапазон чисел |
FLOAT | 4 | От -3.4028 * 1038 до 3.4028 * 1038 |
DOUBLE | 8 | От -1.7976 * 1038 до 1.7976 * 1038 |
Числа с фиксированной точкой
Предназначен для хранения числовых значений с заданной точностью, выделяя для целочисленной и дробной части числа определенный объем памяти. Для этого используют DECIMAL или NUMERIC.
У данных типов можно указывать два параметра в скобках — (M,D). Параметр M указывает на количество отводимых для числа символов, а параметр D на количество символов после запятой. Первый параметр принимает значения до 65 (по умолчанию 10). Второй параметр принимает значения от 0 до 30 (по умолчанию 0).
В качестве примера приведем:
DECIMAL(6,3)
Данный пример позволяет хранить числа, состоящее из шести чисел и трех цифр после запятой. Диапазон подходящих значений будет следующий: от -999.999 до 999.999.
Вышеуказанные типы данных равнозначны, поэтому возможно использовать в своих целях как первый, так и второй. Предназначены они зачастую для сохранения точности и используются зачастую для финансовых вычислений, где важна эта точность и не допустимо округление.
Символьные
Предназначены для хранения небольших текстов. К ним относятся CHAR и VARCHAR. Они похожи между собой. Главное различие между ними — это способ хранения и извлечения данных.
CHAR хранит строку фиксированной длины (от 0 до 28-1 символов), которая задается на этапе создания таблицы. Если происходит передача строки меньшей длины, чем была указана, то оставшиеся символы заполняются пробелами.
Тип данных VARCHAR в MySQL хранит строку переменной длины (от 0 до 216-1 символов), которая также задается на этапе создания таблицы. В отличие от CHAR он хранит только указанную длину, а также выделяет 1 байт для хранения длины строки.
Если длина строки превосходит длину указанную в CHAR или VARCHAR, то передаваемая строка обрезается до допустимой длины.
На этапе создания таблицы, при попытке скомбинировать столбцы CHAR и VARCHAR MySQL изменит тип CHAR на VARCHAR.
Для наглядности ниже будет представлена таблица с примерами хранения разной длины строки для CHAR(5) и VARCHAR(5).
Строка | CHAR(5) | VARCHAR(5) |
‘A’ | ‘A ’ | ‘A’ |
‘Hello’ | ‘Hello’ | ‘Hello’ |
‘Example’ | ‘Examp’ | ‘Examp’ |
Текстовые и бинарные
Текстовый тип данных в MySQL TEXT предназначен для хранения больших текстовых данных, а бинарный BLOB для хранения двоичных данных, таких как изображения, компилированный программный код или звук. Оба этих метода схожи между собой. Главное их отличие — это способ хранения данных и их обработка. У BLOB сортировка и сравнение происходят с учетом регистра, а у TEXT без учета регистра.
MySQL не имеет возможности индексировать данные TEXT и BLOB по всей длине, а также использовать индексы для сортировки.
Если длина строки превосходит возможную длину TEXT или BLOB, то передаваемая строка обрезается до допустимого значения.
Ниже в таблице представлены все модификации типа TEXT, необходимый объем памяти для них и максимально возможное количество символов.
Тип | Объем памяти (байты) | Количество символов |
TINYTEXT | 28-1 | До 28-1 |
TEXT | 216-1 | До 216-1 |
MEDIUMTEXT | 224-1 | До 224-1 |
LONGTEXT | 232-1 | До 232-1 |
Для BLOB будет идентичная таблица, что и для TEXT. Она представлена ниже.
Тип | Объем памяти (байты) | Количество символов |
TINYBLOB | 28-1 | До 28-1 |
BLOB | 216-1 | До 216-1 |
MEDIUMBLOB | 224-1 | До 224-1 |
LONGBLOB | 232-1 | До 232-1 |
Дата и время
Далее будут представлены типы данных для хранения даты и времени. Ниже будет представлена таблица со всеми необходимыми данными.
Тип | Объем памяти (байты) | Краткая информация |
DATE | 3 | Рассчитан на хранение только даты, формата: ‘ГГГГ-ММ-ДД’. Для разделения года, месяца и дня может служить не только дефис, но и любой другой символ. Диапазон данных от 1 января 1000 года до 31 декабря 9999 года. |
DATETIME | 8 | Предполагает хранение даты и времени суток, формата: ‘ГГГГ-ММ-ДД чч: мм: сс’. Диапазон данных от 00:00:00 1 января 1000 года до 23:59:59 31 декабря 9999 года. |
TIMESTAMP | 4 | Рассчитан на хранение даты и времени суток, формата: ‘ГГГГ-ММ-ДД чч: мм: сс’. Из-за меньшего диапазона значений для хранений используется в 2 раза меньше памяти, чем для DATETIME. Диапазон значений от 00:00:01 1 января 1970 года до 03:14:07 9 января 2038 года. |
TIME | 3 | Предполагает хранение только времени, формата: ‘чч: мм: сс’ или ‘ччч: мм: сс’ для большого количества часов. Диапазон времени начиная с -838:59:59 и заканчивая 838:59:59 |
YEAR | 1 | Рассчитан на хранение только года, формата: ‘ГГГГ’. Диапазон данных от 1901 года до 2155 года, а также можно ввести 0000. |
JSON
MySQL поддерживает свой тип данных, который называется JSON (JavaScript Object Notation). Он был выпущен с версией 5.7.8 и предоставляет следующие преимущества по сравнению с хранением объектов в виде текста:
- Во-первых, это автоматическая проверка JSON-документов, которые хранятся в JSON-таблицах.
- Во-вторых, это оптимизированный формат хранения. MySQL преобразует JSON во внутренний формат, который обеспечивает быстрый доступ к элементам подобного типа.
Объем памяти, необходимый для хранения данных типа JSON, примерно такой же, как и у LONGTEXT.
Составные типы
Особый строковый тип данных, который хранит значения из определенного фиксированного набора. Сюда определяют ENUM и SET. Первый хранит одно значение из набора, которое занимает до двух байт памяти. Второй, в свою очередь, может хранить до 26 значений из набора и занимает до восьми байт памяти.
Например, пользователь объявляет некий список значений для ENUM:
ENUM (‘a’, ‘s’, ‘d’)
Тогда значения для такого столбца могут принимать только три значения: это ‘a’, ‘s’, либо ‘d’.
В свою очередь, если пользователь задаст такой же список для SET:
SET (‘a’, ‘s’, ‘d’)
Тогда значения для такого столбца могут принимать только следующие значения: это (‘a’), (‘s’), (‘d’), (‘a’, ‘s’), (‘a’, ‘d’), (‘s’, ‘d’), (‘a’, ‘s’, ‘d’), либо пустое множество ().
В случае, если пользователь вставит значение (‘a’, ’s’, ’a’) в таблицу, тогда при его извлечении MySQL выведет каждый элемент только один раз и в том порядке, в котором они задавались во время создания таблицы. Для (‘a’, ’s’, ’a’) отобразится (‘a’, ‘s’) при извлечении.
Заключение
В данной статье были рассмотрены все основные типы данных таблиц и их столбцов в MySQL, которые чаще всего используются специалистами. Используя полученную информацию, пользователь сможет правильно подобрать нужный тип данных и правильно организовать структуру создаваемой базы данных. Больше о типах данных, в том числе реже используемых, можно узнать из документации MySQL.
MySQL — типы данных — CoderLessons.com
Правильное определение полей в таблице важно для общей оптимизации вашей базы данных. Вы должны использовать только тот тип и размер поля, которые вам действительно нужны. Например, не определяйте поле шириной 10 символов, если вы знаете, что собираетесь использовать только 2 символа. Эти типы полей (или столбцов) также называются типами данных после типа данных, которые вы будете хранить в этих полях.
MySQL использует много разных типов данных, разбитых на три категории:
- числовой
- Дата и время
- Типы строк.
Давайте теперь обсудим их подробно.
Числовые типы данных
MySQL использует все стандартные числовые типы данных ANSI SQL, поэтому, если вы переходите на MySQL из другой системы баз данных, эти определения будут вам знакомы.
В следующем списке показаны распространенные числовые типы данных и их описания.
INT – целое число нормального размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -2147483648 до 2147483647. Если не подписан, допустимый диапазон составляет от 0 до 4294967295. Можно указать ширину до 11 цифр.
TINYINT – очень маленькое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -128 до 127. Если без знака, допустимый диапазон составляет от 0 до 255. Можно указать ширину до 4 цифр.
SMALLINT – небольшое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -32768 до 32767. Если не подписан, допустимый диапазон составляет от 0 до 65535. Можно указать ширину до 5 цифр.
MEDIUMINT – целое число среднего размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -8388608 до 8388607. Если не подписан, допустимый диапазон составляет от 0 до 16777215. Вы можете указать ширину до 9 цифр.
BIGINT – большое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -9223372036854775808 до 9223372036854775807. Если он не подписан, допустимый диапазон составляет от 0 до 18446744073709551615. Можно указать ширину до 20 цифр.
FLOAT (M, D) – число с плавающей точкой, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 10,2, где 2 – количество десятичных знаков, а 10 – общее количество цифр (включая десятичные дроби). Десятичная точность может идти до 24 мест для FLOAT.
DOUBLE (M, D) – число с плавающей запятой двойной точности, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 16,4, где 4 – количество десятичных знаков. Десятичная точность может пойти в 53 места для ДВОЙНОГО. REAL является синонимом для DOUBLE.
DECIMAL (M, D) – неупакованное число с плавающей точкой, которое не может быть без знака. В распакованных десятичных числах каждое десятичное число соответствует одному байту. Требуется определить длину отображения (M) и количество десятичных знаков (D). NUMERIC – это синоним DECIMAL.
INT – целое число нормального размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -2147483648 до 2147483647. Если не подписан, допустимый диапазон составляет от 0 до 4294967295. Можно указать ширину до 11 цифр.
TINYINT – очень маленькое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -128 до 127. Если без знака, допустимый диапазон составляет от 0 до 255. Можно указать ширину до 4 цифр.
SMALLINT – небольшое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -32768 до 32767. Если не подписан, допустимый диапазон составляет от 0 до 65535. Можно указать ширину до 5 цифр.
MEDIUMINT – целое число среднего размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -8388608 до 8388607. Если не подписан, допустимый диапазон составляет от 0 до 16777215. Вы можете указать ширину до 9 цифр.
BIGINT – большое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -9223372036854775808 до 9223372036854775807. Если он не подписан, допустимый диапазон составляет от 0 до 18446744073709551615. Можно указать ширину до 20 цифр.
FLOAT (M, D) – число с плавающей точкой, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 10,2, где 2 – количество десятичных знаков, а 10 – общее количество цифр (включая десятичные дроби). Десятичная точность может идти до 24 мест для FLOAT.
DOUBLE (M, D) – число с плавающей запятой двойной точности, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 16,4, где 4 – количество десятичных знаков. Десятичная точность может пойти в 53 места для ДВОЙНОГО. REAL является синонимом для DOUBLE.
DECIMAL (M, D) – неупакованное число с плавающей точкой, которое не может быть без знака. В распакованных десятичных числах каждое десятичное число соответствует одному байту. Требуется определить длину отображения (M) и количество десятичных знаков (D). NUMERIC – это синоним DECIMAL.
Типы даты и времени
Типы данных даты и времени MySQL:
ДАТА – дата в формате ГГГГ-ММ-ДД, между 1000-01-01 и 9999-12-31. Например, 30 декабря 1973 года будет храниться как 1973-12-30.
DATETIME – комбинация даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС, между 1000-01-01 00:00:00 и 9999-12-31 23:59:59. Например, 3:30 дня 30 декабря 1973 года будет храниться как 1973-12-30 15:30:00.
TIMESTAMP – отметка времени между полуночью 1 января 1970 г. и примерно 2037 г. Это похоже на предыдущий формат DATETIME, только без дефисов между числами; 3:30 во второй половине дня 30 декабря 1973 г. будет сохранено как 19731230153000 (ГГГГММДДЧЧММСС).
ВРЕМЯ – сохраняет время в формате ЧЧ: ММ: СС.
ГОД (М) – Сохраняет год в двухзначном или четырехзначном формате. Если длина указана как 2 (например, ГОД (2)), ГОД может быть между 1970 и 2069 (70-69). Если длина указана как 4, то ГОД может быть от 1901 до 2155. Длина по умолчанию – 4.
ДАТА – дата в формате ГГГГ-ММ-ДД, между 1000-01-01 и 9999-12-31. Например, 30 декабря 1973 года будет храниться как 1973-12-30.
DATETIME – комбинация даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС, между 1000-01-01 00:00:00 и 9999-12-31 23:59:59. Например, 3:30 дня 30 декабря 1973 года будет храниться как 1973-12-30 15:30:00.
TIMESTAMP – отметка времени между полуночью 1 января 1970 г. и примерно 2037 г. Это похоже на предыдущий формат DATETIME, только без дефисов между числами; 3:30 во второй половине дня 30 декабря 1973 г. будет сохранено как 19731230153000 (ГГГГММДДЧЧММСС).
ВРЕМЯ – сохраняет время в формате ЧЧ: ММ: СС.
ГОД (М) – Сохраняет год в двухзначном или четырехзначном формате. Если длина указана как 2 (например, ГОД (2)), ГОД может быть между 1970 и 2069 (70-69). Если длина указана как 4, то ГОД может быть от 1901 до 2155. Длина по умолчанию – 4.
Типы строк
Хотя числовой тип и тип даты являются забавными, большинство данных, которые вы будете хранить, будут в строковом формате. Этот список описывает общие типы данных строки в MySQL.
CHAR (M) – строка фиксированной длины длиной от 1 до 255 символов (например, CHAR (5)), дополненная справа пробелами до указанной длины при сохранении. Определение длины не требуется, но по умолчанию 1.
VARCHAR (M) – строка переменной длины длиной от 1 до 255 символов. Например, VARCHAR (25). Вы должны определить длину при создании поля VARCHAR.
BLOB или TEXT – поле длиной не более 65535 символов. BLOB – это «большие двоичные объекты», которые используются для хранения больших объемов двоичных данных, таких как изображения или другие типы файлов. Поля, определенные как ТЕКСТ, также содержат большие объемы данных. Разница между ними заключается в том, что сортировки и сравнения сохраненных данных чувствительны к регистру на BLOB и не чувствительны к регистру в полях TEXT. Вы не указываете длину с BLOB или TEXT.
TINYBLOB или TINYTEXT – столбец BLOB или TEXT, максимальная длина которого составляет 255 символов. Вы не указываете длину с TINYBLOB или TINYTEXT.
MEDIUMBLOB или MEDIUMTEXT – столбец BLOB или TEXT, максимальная длина которого составляет 16777215 символов. Вы не указываете длину с MEDIUMBLOB или MEDIUMTEXT.
LONGBLOB или LONGTEXT – столбец BLOB или TEXT, максимальная длина которого 4294967295 символов. Вы не указываете длину с LONGBLOB или LONGTEXT.
ENUM – перечисление, которое является необычным термином для списка. При определении ENUM вы создаете список элементов, из которых необходимо выбрать значение (или оно может быть NULL). Например, если вы хотите, чтобы ваше поле содержало «A», «B» или «C», вы должны определить свой ENUM как ENUM («A», «B», «C») и только эти значения (или NULL). мог когда-нибудь заполнить это поле.
CHAR (M) – строка фиксированной длины длиной от 1 до 255 символов (например, CHAR (5)), дополненная справа пробелами до указанной длины при сохранении. Определение длины не требуется, но по умолчанию 1.
VARCHAR (M) – строка переменной длины длиной от 1 до 255 символов. Например, VARCHAR (25). Вы должны определить длину при создании поля VARCHAR.
BLOB или TEXT – поле длиной не более 65535 символов. BLOB – это «большие двоичные объекты», которые используются для хранения больших объемов двоичных данных, таких как изображения или другие типы файлов. Поля, определенные как ТЕКСТ, также содержат большие объемы данных. Разница между ними заключается в том, что сортировки и сравнения сохраненных данных чувствительны к регистру на BLOB и не чувствительны к регистру в полях TEXT. Вы не указываете длину с BLOB или TEXT.
TINYBLOB или TINYTEXT – столбец BLOB или TEXT, максимальная длина которого составляет 255 символов. Вы не указываете длину с TINYBLOB или TINYTEXT.
MEDIUMBLOB или MEDIUMTEXT – столбец BLOB или TEXT, максимальная длина которого составляет 16777215 символов. Вы не указываете длину с MEDIUMBLOB или MEDIUMTEXT.
LONGBLOB или LONGTEXT – столбец BLOB или TEXT, максимальная длина которого 4294967295 символов. Вы не указываете длину с LONGBLOB или LONGTEXT.
ENUM – перечисление, которое является необычным термином для списка. При определении ENUM вы создаете список элементов, из которых необходимо выбрать значение (или оно может быть NULL). Например, если вы хотите, чтобы ваше поле содержало «A», «B» или «C», вы должны определить свой ENUM как ENUM («A», «B», «C») и только эти значения (или NULL). мог когда-нибудь заполнить это поле.
В следующей главе мы обсудим, как создавать таблицы в MySQL.
php — MySQL: размер десятичного типа данных
Поскольку принятый ответ оставил меня желать, я запустил SHOW CREATE TABLE
в таблице, которая содержит несколько столбцов, определенных как DECIMAL DEFAULT NULL
(обратите внимание на отсутствие значений для M и D .
+———————————————-+—- ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— —————+
| Таблица | Создать таблицу |
+———————————————-+—- ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— —————+
| erth_calendarmonths_historic_usage_preload | СОЗДАЙТЕ ТАБЛИЦУ `erth_calendarmonths_historic_usage_preload` (
`рынок` varchar(100) НЕ NULL,
`товар` varchar(100) НЕ NULL,
`account_number` varchar(100) НЕ NULL,
`meter_number` varchar (100) НЕ NULL,
`период_год_месяц` int(11) NOT NULL,
`estimated_usage_amount` decimal(18,7) DEFAULT NULL,
`unit` varchar(100) ПО УМОЛЧАНИЮ NULL,
`meter_read_start_date_part_1` дата и время ПО УМОЛЧАНИЮ NULL,
`meter_read_end_date_part_1` дата и время ПО УМОЛЧАНИЮ NULL,
`gross_nonadjusted_usage_amount_part_1` десятичный (10,0) ПО УМОЛЧАНИЮ NULL,
`applied_nonadjusted_usage_amount_part_1` десятичный (10,0) ПО УМОЛЧАНИЮ NULL,
`meter_read_start_date_part_2` дата и время ПО УМОЛЧАНИЮ NULL,
`meter_read_end_date_part_2` дата и время ПО УМОЛЧАНИЮ NULL,
`gross_nonadjusted_usage_amount_part_2` десятичный (10,0) ПО УМОЛЧАНИЮ NULL,
`applied_nonadjusted_usage_amount_part_2` десятичный (10,0) ПО УМОЛЧАНИЮ NULL,
`utility_rate_class` varchar(100) ПО УМОЛЧАНИЮ NULL,
`utility_rate_subclass` varchar(100) ПО УМОЛЧАНИЮ NULL,
`load_profile` varchar(100) ПО УМОЛЧАНИЮ NULL,
`hu_type` varchar(100) ПО УМОЛЧАНИЮ NULL,
`тип` varchar(100) ПО УМОЛЧАНИЮ NULL,
`utility_duns` varchar(100) ПО УМОЛЧАНИЮ NULL,
`create_date` дата и время ПО УМОЛЧАНИЮ NULL,
`update_date` дата и время ПО УМОЛЧАНИЮ NULL,
`UsedBuckets` tinyint(4) NOT NULL DEFAULT ‘0’,
ПЕРВИЧНЫЙ КЛЮЧ (`рынок`,`товар`,`номер_счета`,`номер_счетчика`,`период_год_месяц`)
) ENGINE=InnoDB CHARSET=utf8 |
+———————————————-+—- ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— ————————————————— —————+
Вышеизложенное делает значения M и D по умолчанию очевидными; M = 10 , а D = 0 . Излишне говорить, что это почти наверняка не желаемый результат.
Всегда указывайте значения M и D.
ДЕСЯТИЧНЫЙ mysql и место для хранения?
Задавать вопрос
спросил
Изменено 4 года, 5 месяцев назад
Просмотрено 7к раз
Насколько я понимаю руководство для DECIMAL
в документации mysql, в нем говорится, что для каждого кратного девяти цифр требуется 4 байта, а для оставшихся цифр требуется следующее;
количество оставшихся цифр | байты 0 | 0 1 | 1 2 | 1 3 | 2 4 | 2 5 | 3 6 | 3 7 | 4 8 | 4
Таким образом, десятичное число (12,6)
будет равно 6 байтам в общей памяти?
Я знаю, что дробная часть всегда будет равна 6 цифрам, поскольку нули дополняются, но целая часть не такова для столбца DECIMAL(12,6)
. Хранилище оценивается по строке или при определении столбца?
Пример
ДЕСЯТИЧНОЕ(12,6) 1: 178.999999 // 3 цифры для целой части, так что всего будет 5 байт? 2: 0.880000 // 1 цифра для целой части, так что всего будет 4 байта? 3 123456.123456 // 6 цифр будут равны 6 байтам?
Или всегда будет 6 байт, если объявлено (12,6)
?
РЕДАКТИРОВАТЬ
Также для хранения десятичного числа, объявленного как (5,5)
, потребуется 6 байтов, а десятичного числа, объявленного как (12,6)
, также потребуется 6 байтов для хранения. Поскольку размер хранилища не является проблемой, повлияет ли разница в размере на то, как mysql извлекает или индексирует столбец?
- mysql
- decimal
Для MySQL 5.1 (и выше) хранилище разделяется на целочисленную и дробную части и освобождает место для хранения максимально возможного числа. Итак, для DECIMAL(12,6) вам нужно 3 байта для целочисленной части и 3 байта для дробной части.