2009-02-19 3 views
7

Какой размер вы используете для общих полей базы данных, например firstName, lastName, Email, password и т. Д.? Я вижу эти общие поля во многих базах данных блогов, форумов, e-commerces и т. Д. Но я не знаю, есть ли какая-либо ссылка или значение по умолчанию для размера для общих полей. Итак, я хочу знать, какой метод/reference/basis вы используете для выбора размера для общих полей.Размер по умолчанию для полей базы данных

+0

См. Http://stackoverflow.com/questions/512614/what-are-the-recommended-database-column-sizes-for-names/ – PartialOrder

ответ

12

Отчасти это зависит от вашей СУБД. Некоторые, как и MySQL 5, заботятся о длине столбца VARCHAR (n) в отличие от столбца TEXT неограниченной длины; другие, такие как PostgreSQL, рассматривают TEXT и VARCHAR (n) как внутренне идентичные, за исключением того, что длина проверяется на столбцах VARCHAR (n). Написание чего-то типа VARCHAR (65536) в PostgreSQL глупо; если вы хотите использовать столбец неограниченной длины, выберите TEXT и сделайте это.

Конечно, иногда попытка слишком долго хранить значение разбивает ваш макет или позволяет кому-то злоупотреблять системой, выбирая длинное имя без пробелов (например). Обычно то, что я делаю для таких полей имени пользователя, просто выбирает верхнюю длину, так что любой, кто хочет более длинного имени пользователя, пытается вызвать проблемы; 64 символа - приятная круглая ценность и, похоже, хорошо работает. Для настоящих имен и адресов (которые часто не отображаются пользователям, например, имя пользователя), вы захотите пойти с чем-то дольше. Вы хотите, чтобы значение было достаточно большим, чтобы оно могло принимать любой допустимый ввод, но не настолько большой, чтобы кто-то мог набивать длинную гигабайтную строку в поле, чтобы атаковать вашу систему. 1024 символов довольно разумно: 1k - это достаточно малое количество текста, с которым легко работать, круглое число и больше, чем любая нормальная адресная строка или имя.

Адреса электронной почты могут, согласно соответствующему RFC, номер которого я слишком ленив, чтобы посмотреть прямо сейчас, не должны превышать 320 символов. Таким образом, ваша длина поля электронной почты. Оказывает, что SMTP ограничивает длину полей до 256 символов; поскольку адреса электронной почты должны быть заключены в скобки, самый длинный действительный адрес электронной почты на самом деле составляет 254 символа. (This page более подробно.) Таким образом, есть Ваша длина поля электронной почты.

Пароли должны НЕ храниться в незашифрованном виде, поэтому ваше поле пароль должен быть массив или BLOB типа точно достаточно долго, чтобы сохранить выход хэш-функции, которую вы используете (или наибольший элемент криптографического группы в использовании, для более сложных схем, таких как SRP-6a).

+5

Только программисты считают, что 64 является «хорошим круглым значением» :) –

+1

Знаете, я прочитал строку «nice round value» и ничего не думал об этом, пока вы не упомянули об этом. :-) –

+1

Это для нас 3, я даже не думал, на самом деле я сказал себе: «64 - хороший круглый номер, может быть, даже 128, если вы хотите больше поля», меня и моего проклятого мышления программирования – UnkwnTech

1

То, что я имею в виду, - это думать о том, как долго может быть значение поля, а затем удвоить это, чтобы быть в безопасности.

E.g. Имя: VARCHAR (70) Email: VARCHAR (200)

+0

Адрес электронной почты может содержать до 320 символов. – PartialOrder

2

мне нравится 16, 32, 64, 128, или 256

+0

странно, но так близко к моему - я просто вокруг шахты - 10, 20, ... 120, 250 – IEnumerator

+0

силы 2 делают компьютер счастливым! –

1

Двойные оценки. А затем удвоить их, чтобы разместить юникод.

Базы данных, в которых есть varchars (почти все), подвергаются очень маленькому штрафу за поля, которые предназначены для хранения более длинных значений, но не так. Вы можете использовать это в своих интересах.

1

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

SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase 

даст вам все, что вам нужно.

ОБНОВЛЕНИЕ: Не используйте точное число.Очевидно, проложите его немного в зависимости от вашей неопределенности, если у вас нет очень большой выборки.

Смежные вопросы