В обсуждении слегка нагретого обсуждения TDWTF возник вопрос о размере столбцов varchar в БД.
Например, возьмите поле, содержащее имя человека (просто имя, фамилию). Легко видеть, что это будет не очень долго. У большинства людей есть имена с менее чем 10 символами, и немногие из них выше 20. Если вы сделаете свой столбец, скажем, varchar (50), он определенно будет содержать все имена, с которыми вы когда-либо сталкивались.
Однако для большинства СУБД нет никакой разницы в размере или скорости, независимо от того, используете ли вы varchar (50) или varchar (255).
Итак, почему люди пытаются сделать свои столбцы как можно меньше? Я понимаю, что в некоторых случаях вам действительно захочется установить ограничение на длину строки, но в основном это не так. И более широкий запас будет полезен только в случае редкого случая человека с чрезвычайно длинным именем.
Добавлено: Люди хотят ссылаться на утверждение о "без разницы в размере или скорости". ОК. Вот они:
Для MSSQL: http://msdn.microsoft.com/en-us/library/ms176089.aspx
Размер хранилища - это фактическая длина введенных данных + 2 байта.
Для MySQL: http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html
L + 1 байт, если значения столбца требуют 0 - 255 байт, L + 2 байта, если для значений может потребоваться больше 255 байт.
Я не могу найти документацию для Oracle, и я не работал с другими СУБД. Но у меня нет причин полагать, что там что-то другое.