Какой размер вы используете для общих полей базы данных, таких как имя, фамилия, адрес электронной почты, пароль и т. д.? Я вижу эти общие поля во многих базах данных блогов, форумов, электронной коммерции и т. д. Но я не знаю, есть ли какая-то ссылка или значение по умолчанию для размера этих общих полей. Итак, я хочу знать, какой метод/ссылка/основа, которую вы используете для выбора размера для общих полей.
Размер по умолчанию для полей базы данных
Ответы (5)
Отчасти это зависит от вашей СУБД. Некоторые, например MySQL 5, заботятся о длине столбца VARCHAR(n), а не о столбце TEXT неограниченной длины; другие, например PostgreSQL, считают TEXT и VARCHAR(n) внутренне идентичными, за исключением того, что длина проверяется в столбцах VARCHAR(n). Написание чего-то вроде VARCHAR(65536) в PostgreSQL глупо; если вам нужен столбец неограниченной длины, выберите ТЕКСТ и покончите с этим.
Конечно, иногда попытка сохранить слишком длинное значение нарушит ваш макет или позволит кому-то злоупотребить системой, выбрав длинное имя без пробелов (например). Обычно то, что я делаю для таких полей имени пользователя, просто выбираю верхнюю длину, чтобы любой, кто хочет более длинное имя пользователя, пытался создать проблемы; 64 символа — хорошее круглое значение, и, похоже, оно работает хорошо. Для реальных имен и адресов (которые не так часто отображаются пользователям, как имя пользователя), вам нужно использовать что-то более длинное. Вам нужно значение, достаточно большое, чтобы оно могло принять любой допустимый ввод, но не настолько большое, чтобы кто-то мог вставить в поле строку длиной в гигабайт только для атаки на вашу систему. 1024 символа вполне разумны: 1 КБ — это достаточно небольшой объем текста, с которым легко работать, круглое число и больше, чем любая вменяемая адресная строка или имя.
Адреса электронной почты, согласно соответствующему RFC, номер которого мне лень искать прямо сейчас, могут быть не длиннее 320 символов. Итак, длина поля вашей электронной почты. Оказывается, SMTP ограничивает длину полей до 256 символов; поскольку адреса электронной почты должны быть заключены в квадратные скобки, самый длинный действительный адрес электронной почты на самом деле составляет 254 символа. (Эта страница содержит более подробную информацию.) Итак, там длина поля вашего электронного письма.
Пароли должны НИКОГДА храниться в виде открытого текста, поэтому поле пароля должно быть массивом байтов или типом BLOB, длина которого должна быть достаточной для хранения вывода используемой вами хэш-функции (или самый большой элемент используемой криптографической группы для более продвинутых схем, таких как SRP-6a).
мне нравится 16, 32, 64, 128 или 256
Удвойте свои оценки. А затем удвоить их, чтобы вместить юникод.
Базы данных, которые имеют varchars (почти все), несут очень небольшой штраф за поля, которые предназначены для хранения более длинных значений, но не имеют. Вы можете использовать это в своих интересах.
Попробуйте представить это в обратном порядке: я использовал существующие данные, чтобы получить разумные длины полей. Предполагая, что у вас есть доступ к базе данных хорошего размера, заполненной реальными данными, быстрый запрос, например:
SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase
даст вам все, что вам нужно.
ОБНОВЛЕНИЕ: Не используйте число, которое вы получили точно. Очевидно, что вы можете немного увеличить его в зависимости от вашей неопределенности, если только у вас нет очень большой выборки.
Что я обычно делаю, так это думаю о том, насколько длинным может быть значение поля, а затем удваиваю его, чтобы быть в безопасности.
Например. Имя: varchar(70) Электронная почта: varchar(200)