Размер по умолчанию для полей базы данных - PullRequest
8 голосов
/ 19 февраля 2009

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

Ответы [ 5 ]

13 голосов
/ 19 февраля 2009

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

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

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

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

1 голос
/ 19 февраля 2009

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

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

даст вам все необходимое.

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

1 голос
/ 19 февраля 2009

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

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

1 голос
/ 19 февраля 2009

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

1 голос
/ 19 февраля 2009

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

например. Имя: варчар (70) Электронная почта: varchar (200)

...