Подтвердить что ты не робот

Сколько реального хранилища используется с объявлением varchar (100) в mysql?

Если у меня есть таблица с полем, которое объявляется как принимающее varchar (100), а затем я фактически вставляю слово "привет", сколько реального хранилища будет использоваться на сервере mysql? Также будет ли вставка результата NULL не использоваться, даже если объявлен varchar (100)?

Каким бы ни был ответ, совместим ли он с различными реализациями базы данных?

4b9b3361

Ответ 1

Если у меня есть таблица с полем, объявляется как принимающий varchar (100) и тогда я действительно вставляю слово "привет", сколько реального хранилища будет используется на сервере mysql?

Mysql будет хранить 5 байтов плюс один байт для длины. Если varchar больше 255, тогда он сохранит 2 байта для длины.

Обратите внимание, что это зависит от кодировки столбца. Если charset является utf8, mysql потребует до 3 байтов на символ. Для некоторых систем хранения (т.е. Памяти) всегда требуется максимальная длина байта для символа для набора символов.

Также будет добавлена ​​вставка NULL в без использования хранилища, хотя varchar (100) объявлен?

Создание столбца nullable означает, что mysql придется выделять дополнительный байт на 8 столбцов с нулевым значением для каждой строки. Это называется "нулевой маской".

Каким бы ни был ответ, совместим ли он с различными реализациями базы данных?

Он даже не согласован между механизмами хранения в mysql!

Ответ 2

Это действительно зависит от вашей кодировки.

В отличие от CHAR значения VARCHAR хранятся как однобайтовые или двухбайтовые префикс длины плюс данные. Длина префикс указывает количество байтов в значении. Столбец использует одну длину байт, если значения не превышают 255 байт, два байта длины, если значения может потребоваться более 255 байт.

- источник

UTF-8 часто занимает больше места, чем кодирование, сделанное для одного или нескольких языки. Латинские буквы с диакритики и персонажей из других алфавитные сценарии обычно берут один байт на символ в соответствующем многобайтовое кодирование, но UTF-8. Восточноазиатские сценарии вообще имеют два байта на символ в своем многобайтовые кодировки, но три байтов на символ в UTF-8.

- источник

Ответ 3

varchar сохраняет только то, что используется, тогда как char хранит заданное количество байтов.

Ответ 4

Utf16 иногда принимает меньше данных, а затем utf8, для некоторых редких языков, я не знаю, какие из них.

Ребята, есть ли возможность использовать таблицы COMPRESSed в MySql? Как в Apache. Большое спасибо