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

вы можете использовать [] в путях привязки для ссылки на индекс

в вашем коде

//you can only bind to public properties
public List<Person> People { get; set; }

в вашем XAML

<Label Text="{Binding People[10].Name}" />
36
задан Martin Thoma 17 July 2014 в 18:23
поделиться

6 ответов

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

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

21
ответ дан MarkD 27 November 2019 в 06:04
поделиться

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

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

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

1
ответ дан Alon Kogan 27 November 2019 в 06:04
поделиться

1) Да.

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

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

0
ответ дан Toby Allen 27 November 2019 в 06:04
поделиться

Выдержка из документации 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 байтов.

19
ответ дан 27 November 2019 в 06:04
поделиться

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

1
ответ дан 27 November 2019 в 06:04
поделиться

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

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

Вы можете просмотреть дополнительные сведения об этом здесь:

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

1
ответ дан 27 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: