Возможный дубликат:
Важность длины varchar в таблице MySQL
При использовании VARCHAR (если это правильный тип данных для короткой строки) имеет значение размер? Если я установил его на 20 символов, это займет меньше места или будет быстрее 255 символов?
В общем случае для поля VARCHAR объем данных, хранящихся в каждом поле, определяет его размер на диске, а не максимальный размер (в отличие от поля CHAR, которое всегда имеет одинаковый след).
Существует верхний предел для всех данных, хранящихся во всех полях индекса 900 байт ( ограничение размера байта 900 байтов в длине символа ).
Чем больше вы делаете поле, тем больше вероятность того, что люди будут пытаться использовать в целях, отличных от того, что вы намеревались, – и чем больше экранная недвижимость, требуемая для показа стоимости, тем лучше, чтобы попытаться выбрать нужный размер чем предполагать, что если вы сделаете это как можно больше, это избавит вас от необходимости пересмотреть дизайн.
Да, это вопрос, когда вы индексируете несколько столбцов.
Префиксы могут быть длиной до 1000 байтов (767 байт для таблиц InnoDB). Обратите внимание, что префиксные пределы измеряются в байтах, тогда как длина префикса в операторах CREATE TABLE интерпретируется как количество символов. Не забудьте принять это во внимание при указании длины префикса для столбца, который использует многобайтовый набор символов.
источник: http://dev.mysql.com/doc/refman/5.0/en/column-indexes.html
В латинской сортировке вы можете указать только 3 столбца varchar(255)
.
Пока может указывать до 50 столбцов для varchar(20)
In-напрямую, без надлежащего индекса, он будет замедлять скорость запроса
Что касается хранения, это не делает различий,
как стенд varchar
для variable-length strings
Фактические различия:
TINYTEXT и другие поля TEXT хранятся отдельно от строки в памяти внутри кучи MySQL, тогда как поля VARCHAR () содержат ограничение до 64k (поэтому вы можете иметь более 64k в TINYTEXT, тогда как вы не будете с VARCHAR).
TINYTEXT и другие «blob-like» поля заставят SQL-слой (MySQL) использовать временные таблицы на диске при каждом использовании, тогда как VARCHAR будет по-прежнему сортироваться «в памяти» (хотя будет преобразован в CHAR для полной ширины) ,
InnoDB внутренне не заботится о том, является ли это tinytext или varchar. Это очень легко проверить, создайте две таблицы: одну с VARCHAR (255), другую с TINYINT и вставьте запись в оба. Они оба возьмут одну страницу 16k, тогда как если используются страницы переполнения, таблица TINYTEXT должна отображаться как взятая не менее 32k в «SHOW TABLE STATUS».
Обычно я предпочитаю VARCHAR (255) – они не вызывают слишком много фрагментации кучи для одной строки и могут рассматриваться как один объект 64k в памяти внутри MySQL. Различия в размерах InnoDB незначительны.
В документации MySQL: http://dev.mysql.com/doc/refman/5.0/en/char.html
У вас есть таблица, которая указывает байты VARCHAR (4) (против CHAR (4)).
Простой VARCHAR (4) без строки, всего 1 байт. Тогда простой VARCHAR (255) без строки равен 1 байт. VARCHAR (4) с «ab» имеет 3 байта, а VARCHAR (255) с «ab» – 3 байта. То же самое, но с предельным пределом 🙂
Это не повлияет на производительность. В этом случае ограничение просто помогает обеспечить целостность данных.
Этот ответ должен помочь вам.
Если вы установите значение 20, оно сохранит только первые 20 символов. Так что да, это займет меньше места, чем 255 символов :).
Необходимое пространство для хранения VARCHAR
выглядит следующим образом:
VARCHAR(L)
,VARBINARY(L)
–L
+ 1 байт, если значения столбца требуют 0 – 255 байт,L
+ 2 байта, если для значений может потребоваться больше 255 байт
Поэтому VARCHAR
требует только пространство для строки плюс один или два дополнительных байта для длины строки.