Подтвердить что ты не робот

Почему я должен выбирать любую другую длину, чем 255 для varchar в MySQL?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Выдержка из документации по 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 до 65535 в 5.0.3 и более поздних версиях. Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, которая распределяется между всеми столбцами) и используемого набора символов.

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

Ответ 3

CHAR Vs VARCHAR

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

например.

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 vs VARCHAR

Изменить

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

Спасибо.

Ответ 4

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

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

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

Ответ 5

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

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

Подробнее об этом можно узнать здесь:

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

Ответ 6

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

Ответ 7

1) Да.

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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