Каковы преимущества и недостатки использования VARCHAR против TEXT для хранения небольших XML-документов в MySQL? - PullRequest
5 голосов
/ 23 декабря 2011

Если XML-документы, которые должны храниться, всегда меньше 64 КБ (то есть, AFAIK, предел VARCHAR), какие могут быть плюсы и минусы типов столбцов VARCHAR и TEXT, которые будут использоваться для этой задачи?

1 Ответ

2 голосов
/ 23 декабря 2011

Следующие выдержки были извлечены из документов MySQL, относящихся к типам строк .

"Строка переменной длины. M представляет максимальную длину столбца в символах. Диапазон M равен 0до 65 535. Эффективная максимальная длина VARCHAR зависит от максимального размера строки (65 535 байт, который распределяется между всеми столбцами) и используемого набора символов. Например, для символов utf8 может потребоваться до трех байтов на символ, поэтомуСтолбец VARCHAR, использующий набор символов utf8, может быть объявлен как максимум 21 844 символа. См. Раздел E.10.4, «Ограничения по количеству столбцов таблицы и размеру строки».

MySQL хранит значения VARCHAR как единое целое-байтовый или двухбайтовый префикс длины плюс данные. Префикс длины указывает количество байтов в значении. Столбец VARCHAR использует один байт длины, если значения требуют не более 255 байтов, два байта длины, если значения могут требовать более 255 байтов.. "

И выдержка TEXT:

" Столбец TEXT с максимальным значениемиз 65 535 (216 - 1) символов.Эффективная максимальная длина меньше, если значение содержит многобайтовые символы.Каждое значение TEXT сохраняется с использованием двухбайтового префикса длины, который указывает количество байтов в значении.

Для этого типа может быть указана дополнительная длина M.Если это будет сделано, MySQL создаст столбец как наименьший тип TEXT, достаточно большой, чтобы содержать значения длиной M символов. "

Кажется, что текст и varchar одинаковы на поверхности, поскольку они имеют одинаковыеЕмкость для хранения строк, но после некоторых дальнейших исследований я наткнулся на следующий поток , который указывает, что MySQL по-разному обрабатывает оба столбца при работе с индексами и при создании временных таблиц, которые влияют на производительность запросов.

Если вы не планируете выполнять какие-либо запросы к хранимым данным, я бы рекомендовал рассмотреть решение NoSQL, такое как MongoDB .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...