Varchar (255) vs tinytext/tinyblob и varchar (65535) vs blob/text

По определению:

VARCHAR: диапазон длины от 1 до 255 символов. Значения VARCHAR сортируются и сравниваются без учета регистра, если не указано ключевое слово BINARY. x + 1 байт
TINYBLOB, TINYTEXT: столбец BLOB или TEXT с максимальной длиной 255 (2 ^ 8 - 1) символов x + 1 байт

Итак, основываясь на этом, я создаю следующую таблицу:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Или лучше создать varchar или tinytext и почему?

Одинаково для:

VARCHAR: диапазон длины составляет > 255 символов. Значения VARCHAR сортируются и сравниваются без учета регистра, если не указано ключевое слово BINARY. x + 2 байт
BLOB, TEXT Столбец BLOB или TEXT с максимальной длиной 65535 (2 ^ 16 - 1) символов x + 2 байта

Ответ 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 байт.

Ответ 2

В этом случае varchar лучше.

Обратите внимание, что varchar может быть от 1 до 65535 символов.

Значения в столбцах VARCHAR представляют собой строки переменной длины. Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65535 в 5.0.3 и более поздних версиях. Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, которая распределяется между всеми столбцами) и используемого набора символов. См. Раздел E.7.4 "Границы столбцов таблицы и количества строк".

Бобы сохраняются в отдельном разделе файла.
Им требуется дополнительная информация для включения в данные.
По этой причине varchar извлекается намного быстрее.

Если у вас есть большой blob, к которому вы обращаетесь нечасто, чем blob имеет больше смысла.
Хранение данных blob в отдельном файле (части) позволяет вашему основному файлу данных быть меньшим и, следовательно, быстрее получать.