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

19

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

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

    
задан Benj 24.11.2009 в 15:43
источник

4 ответа

16
  

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

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

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

  

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

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

  

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

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

    
ответ дан ʞɔıu 24.11.2009 в 15:51
источник
  • Имейте в виду, что цифры указаны для таблиц MyISAM. У InnoDB или других двигателей могут быть другие требования. См. Также: dev.mysql.com/doc/refman/5.1/ru/storage-requirements.html –  johannes 24.11.2009 в 15:58
  • , так что независимо от того, сколько ограничений мы установили для типа данных varchar. правильно? –  CJ Ramki 16.06.2015 в 05:07
13

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

  

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

- источник

  

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

- источник

    
ответ дан Corey Ballou 24.11.2009 в 15:46
источник
  • Большое спасибо, просто то, что я хотел знать. –  Benj 24.11.2009 в 15:48
  • это не отвечает на вопрос, касающийся нулей. –  Allain Lalonde 24.11.2009 в 15:48
  • Да, но ссылка источника конкретно объясняет байтовые требования полей VARCHAR и дает пример, используя пустую строку. Я подумал, что стоит прочитать его. –  Corey Ballou 24.11.2009 в 15:53
  • Это, конечно, было ура, –  Benj 24.11.2009 в 15:56
2

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

    
ответ дан Chris Gutierrez 24.11.2009 в 15:46
источник
0

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

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

    
ответ дан Dan 24.11.2009 в 19:54
источник