Почему я должен выбрать любую другую длину, кроме 255 для varchar в MySQL? - PullRequest
36 голосов
/ 02 июля 2010

Я знаю разницу между CHAR и VARCHAR,

CHAR - фиксированная длина

VARCHAR - переменная длина (размер + 1 байт)

Но я хотел знать, в чем заключалась цель иметь опцию длины varchar, например VARCHAR(50), VARCHAR(100), VARCHAR(255)

Это кажется мне бессмысленным, потому что фактическое используемое пространство зависит от значенияхранится в базе данных.

Итак, мои вопросы:

1) Можно установить для всех моих varchar значение 255 2) Почему вы хотите указать другую длину?

Ответы [ 9 ]

21 голосов
/ 02 июля 2010

1) Если вы не хотите ограничивать максимальный размер хранимого varchar, тогда да, это нормально. Как говорится ...

2) Во многих случаях вы хотите установить верхний предел для размера varchar. Допустим, вы храните список рассылки и имеете ограниченное количество места для адресной строки. Установив верхний предел для вашего поля адреса, вы теперь разрешаете базе данных устанавливать максимальную длину адресной строки для вас.

19 голосов
/ 02 июля 2010

Выдержка из документации MySQL :

Типы CHAR и VARCHAR похожи, но отличаются тем, как они хранятся и извлекаются.Начиная с MySQL 5.0.3, они также различаются по максимальной длине и тому, сохраняются ли конечные пробелы.

Типы CHAR и VARCHAR объявляются с длиной, указывающей максимальное количество символов, которое вы хотите сохранить.Например, CHAR (30) может содержать до 30 символов.

Длина столбца CHAR устанавливается равной длине, которую вы объявляете при создании таблицы.Длина может быть любым значением от 0 до 255. Когда значения CHAR сохраняются, они дополняются справа пробелами до указанной длины.При получении значений CHAR завершающие пробелы удаляются.

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

В отличие от CHAR, VARCHARзначения хранятся в виде однобайтового или двухбайтового префикса длины плюс данные.Префикс длины указывает количество байтов в значении.Столбец использует один байт длины, если значения требуют не более 255 байтов, два байта длины, если значения могут требовать более 255 байтов.

4 голосов
/ 28 ноября 2012

ЧАР против VARCHAR

CHAR используется для переменной размера фиксированной длины.
VARCHAR используется для переменной длины.

1010 * Е.Г. *

create table emp
(f_name CHAR(20),
 l_name VARCHAR(20)
);

insert into emp values('Suraj','Chandak');

select length(f_name), length(l_name) from emp;

Output will be

length(f_name)          Length(l_name)
   20                       7

Лучший ответ для CHAR против VARCHAR

Редактировать

  • Вы можете установить максимальный верхний предел для столбца.
  • Производительность и хранение могут иметь влияние.

Спасибо.

3 голосов
/ 22 ноября 2013

Таблицы фиксированной длины (статические) быстрее.Когда каждый столбец в таблице имеет «фиксированную длину», таблица также считается «статической» или «фиксированной длины» .Примеры типов столбцов НЕ фиксированной длины: VARCHAR, TEXT, BLOB.

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

Так что если в вашей таблице нет других полей, которые являются varchar,текст или капля;Вы можете использовать char и сделать свой стол статическим.Таким образом, они быстрее.

1 голос
/ 09 августа 2013

Но я хотел знать, в чем заключалась цель иметь опцию длины varchar, например. VARCHAR (50), VARCHAR (100), VARCHAR (255)

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

Указание, например, VARCHAR (5) вместо VARCHAR (500) может дать вам лучшую производительность в некоторых случаях, например для операций, которые используют временные таблицы в памяти.

Другим случаем является ограничение длины столбца требованиями домена (если ваше значение не должно превышать некоторого максимума. Пример: полное доменное имя в DNS не может превышать 253 символа)

1 голос
/ 19 мая 2013

Основное различие между этими двумя типами значений проявляется при сравнении строк.

В столбце CHAR, длина которого предопределена, вам придется «бегать» по всей длине столбца, тогда как в столбце VARCHAR вам нужно «бегать» по всей длине значения, а не по столбцу. длина, которая в большинстве случаев намного быстрее.

Поэтому длина значения, которая меньше, чем длина поля, будет сравниваться быстрее, если хранится в поле VARCHAR.

1 голос
/ 02 июля 2010

Я читал в другом месте, что varchar имеет снижение производительности по сравнению с char, когда вы запускаете select для столбцов, определенных с ними.Поэтому, возможно, вы захотите выбрать char, если точно знаете, что поле всегда будет иметь определенную длину, и у вас есть проблемы с производительностью ...

1 голос
/ 02 июля 2010

1) Технически это хорошо, потому что поля создаются только с 1 или 2 байтами в начале. После этого они будут расти по мере необходимости.

2) Сказав, что хорошие принципы проектирования предполагают, что вы устанавливаете длины полей соответствующим образом, а) Если кто-то просматривает схему таблиц и пытается выяснить, сколько данных хранится в определенных полях, он может видеть, что определенные поля будет содержать меньше данных, чем другие, и b) вы можете предотвратить небольшие объемы дополнительной работы, выполняемой ядром базы данных, поскольку ему приходится урезать меньше пространства из поля VARCHAR (10), чем VARCHAR (255) во время вставки.

Вы можете просмотреть дополнительную информацию об этом здесь:

http://dev.mysql.com/doc/refman/5.0/en/char.html

0 голосов
/ 02 июля 2010

1) Да.

2) Исторически это был хит производительности.

Посмотрите на базы данных, такие как sqlite, которые хранят все как текст, чтобы убедиться, что это больше не имеет значения.

...