Ответ 1
FROM: http://www.pythian.com/news/7129/text-vs-varchar/
На первый взгляд, похоже, что TEXT и VARCHAR могут хранить то же самое Информация. Однако существуют фундаментальные различия между поля TEXT и поля VARCHAR, которые важны для принятия во внимание.
Стандартная VARCHAR фактически является частью стандарта ISO SQL: 2003; Типы данных TEXT, включая TINYTEXT, являются нестандартными.
Хранение Типы данных TEXT хранятся как отдельные объекты из таблиц и наборов результатов, содержащих их. Это хранилище прозрачное - нет никакой разницы в том, как запрос с использованием поля ТЕКСТ написанное против одного, включающее поле VARCHAR. Поскольку TEXT не сохраняется как часть строки, поиск полей TEXT требует дополнительных [отредактированных 1/22].
Максимальная длина VARCHAR Максимальная длина строки VARCHAR ограничена максимальной длиной строки таблицы. Это 65 535 байт для большинства систем хранения (NDB имеет другое максимальное значение строки). Теоретически максимальная длина VARCHAR составляет 65 536 байт. Накладные расходы дополнительно ограничивают фактический максимальный размер VARCHAR.
Сохранение длины поля VARCHAR занимает 1 байт, если VARCHAR поле имеет максимальную длину 0-255 байт; если оно больше 255 байты, служебные данные для хранения длины составляют 2 байта. Если VARCHAR поле допускает значения NULL, что добавляет дополнительные накладные расходы - каждая таблица использует 1 байт служебных данных для каждого набора из 8 полей, которые позволяют NULL значения. Если VARCHAR является единственной строкой в таблице и не разрешить значения NULL, максимальная длина, разрешенная для VARCHAR, равна 65 532 байтов.
Имейте в виду, что число в VARCHAR (x) представляет собой число символов, а не количество байтов. Поэтому у вас могут быть трудности пытаясь определить таблицу только с VARCHAR (65532), если набор символов использует многобайтовые символы, такие как UTF-8.
Если вы попытаетесь определить значение VARCHAR, которое больше, чем разрешено, вы столкнетесь с такой ошибкой, как 1118 или 1074:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs. ERROR 1074 (42000): Column length too big for column 'col_name' (max=[max number here]); use BLOB or TEXT instead
Максимальная длина текста Максимальный размер типа данных TEXT зависит от типа используемого типа TEXT. Потому что они хранятся как объекты, единственными накладными расходами строки в объекте таблицы является указатель (8 или 16 байтов). Ниже приведен список максимальной длины текста и (в объекте ТЕКСТ):
TINYTEXT – up to 255 bytes, 1 byte overhead TEXT – up to 64 Kb, 2 bytes overhead MEDIUMTEXT – up to 16 Mb, 3 bytes overhead LONGTEXT – up to 4 Gb, 4 bytes overhead
Значения DEFAULT. MySQL не допускает, чтобы типы данных TEXT имели значение по умолчанию, отличное от NULL. Поля VARCHAR разрешены созданный с использованием значения DEFAULT.
Выводы Из-за последствий для хранения предпочтительнее использовать VARCHAR вместо TINYTEXT.
Если вам нужно иметь значение DEFAULT, которое не является NULL, вы должны использовать VARCHAR (или CHAR).
Если вам нужно хранить строки дольше 64 КБ, используйте MEDIUMTEXT или LONGTEXT. VARCHAR не может поддерживать сохранение значений, которые большой.
Убедитесь, что вы знаете о эффектах многобайтового набора символов. VARCHAR (255) хранит 255 символов, длина которых может превышать 255 байт.