mysql text размер




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

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

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 байта


В этом случае 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 в отдельном файле (части) позволяет вашему основному файлу данных быть меньшим и, следовательно, быстрее получать.


ОТ: 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 байт.





mysql