Как вы знаете, когда использовать varchar и когда использовать текст в SQL? - PullRequest
4 голосов
/ 16 января 2011

Это кажется очень произвольным решением.И то, и другое может сделать то же самое в большинстве случаев.При ограничении длины varchar мне кажется, что вы стреляете себе в ногу, потому что вы никогда не знаете, какой длины поля вам понадобится.

Существуют ли какие-то конкретные рекомендации для выбора VARCHAR или TEXT для ваших строковых полей?

Я буду использовать postgresql с инфраструктурой sqlalchemy orm для python.

Ответы [ 6 ]

7 голосов
/ 16 января 2011

В PostgreSQL нет технической разницы между varchar и text

Вы можете увидеть varchar(nnn) в виде столбца text с проверочным ограничением, запрещающим хранить большие значения.

Поэтому каждый раз, когда вы хотите установить ограничение длины, используйте varchar(nnn).

Если вы не хотите ограничивать длину данных, используйте text

2 голосов
/ 16 января 2011

Это предложение неверно:

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

Если вы сохраняете, например, хеши MD5, вы знаете, насколько велико поле для хранения, и хранилище становится более эффективным.Другие примеры:

  • Имена пользователей (не более 64)
  • Пароли (не более 128)
  • Почтовые индексы
  • Адреса
  • Теги
  • Много еще!
1 голос
/ 16 января 2011

Вкратце:

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

Подумайте об аналогии с массивами и связанными списками, где массивы - это поля фиксированной длины, а связанные списки - как varchars. Что лучше, массивы или связанные списки? К счастью, у нас есть оба, потому что они оба полезны в разных ситуациях, и здесь тоже.

0 голосов
/ 16 января 2011

Отметьте эту статью в PostgresOnline, она также ссылается на две другие полезные статьи.

Большинство проблем с TEXT в PostgreSQL возникает, когда вы используете инструменты, приложения и драйверы, которые обрабатывают TEXTсильно отличается от VARCHAR, потому что другие базы данных ведут себя очень по-разному с этими двумя типами данных.

0 голосов
/ 16 января 2011

Разработчики баз данных почти всегда знают, сколько символов должно содержать столбец. Адреса доставки в США должны содержать до 64 символов. (Почтовая служба США публикует инструкции по адресации, которые так говорят.) Почтовые индексы США имеют длину 5 символов.

Дизайнер базы данных будет смотреть на репрезентативные образцы данных от своих клиентов, когда будет указывать столбцы. Она задаст себе вопросы типа «Какое самое длинное название продукта?» И когда ответ «70 символов», она не будет иметь ширину столбца 3000 символов.

VARCHAR имеет ограничение 8 КБ в SQL Server (я думаю). Большинству приложений не требуется почти столько же памяти для одного столбца.

0 голосов
/ 16 января 2011

В большинстве случаев вы знаете, какова максимальная длина строки в поле.В случае имени фамилии вам не нужно, например, более 255 символов.Таким образом, по своему дизайну вы выбираете, какой тип использовать, если вы всегда используете текст, вы тратите ресурсы

...