mysql char, varchar и десятичный размер байта - PullRequest
0 голосов
/ 23 сентября 2018

Я читал документацию mysql о размере байта для разных типов данных, но был немного смущен, когда речь шла о char, varchar и decimal.

Может кто-нибудь помочь объяснитьбайты для этих трех типов данных, а также ответьте, сколько байтов для следующих:

char(7)
varchar(9)
decimal(15,2)
decimal(11,6)

Спасибо

1 Ответ

0 голосов
/ 23 сентября 2018

CHAR (N) , вероятно, является наиболее запутанным, потому что символ не является фиксированным размером байта в наборах символов.Кроме того, разные форматы строк по-разному решают эту проблему.Вкратце, если вы используете ROW_FORMAT = COMPACT, ROW_FORMAT = DYNAMIC или ROW_FORMAT = COMPRESSED, то CHAR (N) инвертирует минимум N байтов, чтобы получить обновления на месте без фрагментации.Если в результате другой кодировки символов требуется больше байтов, чем будет использоваться больше по мере необходимости, при этом старается использовать как можно меньше, и НЕТ БОЛЬШЕ, чем максимальная длина символа * N.Если вы используете ROW_FORMAT = REDUNDANT, то CHAR (N) всегда использует максимальную длину символа * N.

VARCHAR (N) и VARBINARY (N) устанавливает максимальную длину символана столбец N. Ниже N MySQL использует требуемое количество байтов с учетом используемой кодировки строки и символа.Затем MySQL использует один дополнительный байт для записи длины строки, если строка меньше 256 байтов.Если длина строки превышает 255 байтов, то для записи длины строки используются 2 байта.Столбцы VAR эффективны для хранения, но для строковых столбцов с частыми ОБНОВЛЕНИЯМИ можно обменять хранилище на производительность, используя столбец фиксированной длины, такой как BINARY.

Описание DECIMAL довольно самоочевидно: "Значения для столбцов DECIMAL (и NUMERIC) представлены в двоичном формате, который упаковывает девять десятичных (основание 10) цифр в четыре байта. Хранение для целой и дробной частей каждого значения определяется отдельно. Каждому кратному из девяти цифр требуется четыре байта,и для «оставшихся» цифр требуется некоторая доля в четыре байта. Для хранения избыточных цифр требуется следующая таблица «

...