Имеет ли смысл ограничивать длину varchar?

Ну собственно сабж. Постоянно парюсь по этому поводу. Толи оставлять 32 байта для имени например или мд5 хешей, толи 255 и не мучаться а ограничивать длину программно. Будет ли занимать лишние байты при хранении такие строки и увеличится ли индекс в размере?

То же касается и других типов данных. Например int (про таблицу типов инт и количество байт я в курсе, речь именно о искусственном ограничении)
  • Вопрос задан
  • 2686 просмотров
Решения вопроса 4
Обязательно нужно ограничивать!
То же самое в int если знаете что числа будут небольшие - используйте smallint
Ответ написан
petermzg
@petermzg
Самый лучший программист
Для хранения md5 хешей лучше еще вместо varchar использовать тип char(32)
Ответ написан
@AlexeyVD
VARCHAR - строки переменной длины. Если в VARCHAR(255) записать 32-байтную строку, то и в памяти строка займет 32 байта + 1 байт на хранение длины строки.
А вот поле CHAR(255) всегда будет занимать 255 байт (незаполненный данные при хранении заполняются пробелами).
Так что если в будущем длина поля может поменяться, и строгое ограничение длины в базе не критично, то смело пишите VARCHAR(255). В базе будет храниться ровно столько данных. сколько вы туда запишете.

По целочисленным типам, как уже написали - если знаете диапазон значений в этом поле и уверены, что со временем величины из этого диапазона не выйдут, то используйте максимально длизкий к этому диапазону тип для хранения. Например, если значения в столбце никогда не превысят 127, то достаточно поля TINYINT.
Ответ написан
Комментировать
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Для данных фиксированной длины, лучше использовать поля фиксированной длины. База будет эффективней работать. Это по производительности. А с точки зрения целостности данных база - последняя линия обороны. Поэтому лучше чтобы параметры полей соответствовали проекту. А то потом где-то всплывет что-нибудь. Или будет глючить неуловимо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы