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


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

VARCHAR: диапазон длины от 1 до 255 символов. Значения VARCHAR сортируются и сравниваются без учета регистра, если не задано ключевое слово BINARY. x + 1 байт
TINYBLOB, TINYTEXT: большой двоичный объект или текстовый столбец с максимальной длиной 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 байта
Большой двоичный объект, текст большой двоичный объект или текстовый столбец с максимальной длиной 65535 (2^16 - 1) символов x+2 байта

2 78

2 ответа:

от:http://www.pythian.com/news/7129/text-vs-varchar/

На первый взгляд, это выглядит как текст и VARCHAR может хранить то же самое информация. Однако существуют фундаментальные различия между как работают текстовые поля и поля VARCHAR, которые важно принять с учетом этого.

стандартный VARCHAR фактически является частью стандарта ISO SQL: 2003; типы текстовых данных, включая TINYTEXT, являются нестандартный.

для хранения текстовые типы данных хранятся как отдельные объекты из таблиц и результирующих наборов, которые их содержат. Это хранилище является прозрачным - нет никакой разницы в том, как запрос с участием текстового поля написано против одного с участием Поля ВАРЧАРА. Так как текст не сохраняется как часть строки, извлечение текстовых полей требует дополнительного [отредактировано 1/22] память.

максимальная длина VARCHAR максимальная строка длина VARCHAR ограничена максимальной длиной строки таблицы. Это 65 535 байт для большинства механизмов хранения (NDB имеет другое максимальное значение строки). Теоретически максимальная длина VARCHAR составляет 65 536 байт. Накладные расходы дополнительно ограничивают фактический максимальный размер VARCHAR.

хранение длины поля VARCHAR занимает 1 байт, если VARCHAR поле имеет максимальную длину 0-255 байт; если оно больше 255 байты, накладные расходы для хранения длины 2 байты. Если тип varchar поле допускает нулевые значения, что добавляет дополнительные накладные расходы-каждая таблица использует 1 байт служебных данных для каждого набора из 8 полей, которые позволяют NULL ценности. Если VARCHAR является единственной строкой в таблице, и не делает разрешить нулевые значения, максимальная длина, разрешенная для 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

максимальная длина текста максимальный размер типа текстовых данных зависит от типа используемого типа текстовых данных. Потому что они хранятся как объекты, единственная строка накладных расходов в объекте таблицы является указатель (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

значения по умолчанию MySQL не позволяет текстовым типам данных иметь значение по умолчанию, отличное от NULL. Поля VARCHAR могут быть создано со значением по умолчанию.

выводы из-за последствий хранения предпочтительно использовать VARCHAR вместо TINYTEXT.

Если вам нужно иметь значение по умолчанию это не NULL, вы должны использовать ВАРЧАР (или чар).

Если вам нужно хранить строки длиной примерно 64 Кб, используйте MEDIUMTEXT или LONGTEXT. VARCHAR не может поддерживать хранение значений, которые большой.

убедитесь, что вы знаете о последствиях многобайтовой кодировки. VARCHAR (255) хранит 255 символов, которые могут быть больше 255 байт.

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

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

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

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

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