数据库字段的默认大小

时间:2009-02-19 03:21:39

标签: sql database database-design field

您用于常见数据库字段的大小,例如firstName,lastName,Email,密码等?我在很多博客,论坛,电子商务等数据库中都看到了这些常见字段。但我不知道是否有一些参考或默认的公共字段的大小。所以,我想知道你用什么方法/参考/基础来选择公共字段的大小。

5 个答案:

答案 0 :(得分:13)

部分地,这取决于您的DBMS。有些像MySQL 5一样关心VARCHAR(n)列的长度而不是无限长度的TEXT列;其他像PostgreSQL一样,将TEXT和VARCHAR(n)视为内部相同,但在VARCHAR(n)列上检查长度除外。在PostgreSQL中写一些类似VARCHAR(65536)的东西很傻;如果你想要一个无限长的列,选择TEXT并完成它。

当然,有时试图存储太长的值会破坏您的布局,或者允许某人通过选择没有空格的长名称来滥用系统(例如)。通常我对这样的用户名字段做的只是选择一个较长的长度,这样任何想要更长用户名的人都会试图造成麻烦; 64个字符是一个很好的圆值,似乎运作良好。对于真实姓名和地址(不经常向用户显示,如用户名),你会想要更长的时间。你想要一个足够大的值,它可以接受任何有效的输入,但不是那么大,以至于有人可能在字段中填充一个长达数GB的字符串只是为了攻击你的系统。 1024个字符是非常合理的:1k是一个足够小的文本,可以轻松使用,一个圆数,并且比任何理智的地址行或名称都大。

电子邮件地址可以根据我现在懒得查找的相关RFC,不超过320个字符。所以这是你的电子邮件字段长度。结果是SMTP将字段长度限制为256个字符;由于电子邮件地址必须加上括号,因此最长的有效电子邮件地址实际上是254个字符。 (This page详细介绍。)所以 你的电子邮件字段长度。

密码 NEVER 应以明文形式存储,因此您的密码字段应为字节数组或BLOB类型,其长度足以存储您所使用的散列函数的输出使用(或使用加密组的最大元素,用于更高级的方案,如SRP-6a)。

答案 1 :(得分:1)

我倾向于想到一个字段的值可能有多长,然后加倍才能安全。

E.g。名称:varchar(70) 电子邮件:varchar(200)

答案 2 :(得分:1)

我喜欢16,32,64,128或256

答案 3 :(得分:1)

估算值翻倍。然后加倍来容纳unicode。

具有varchars(几乎所有)的数据库对于设计为保持更长值但不保留更长值的字段会产生非常小的惩罚。你可以利用这个优势。

答案 4 :(得分:1)

尝试反过来思考:我使用现有数据来获得合理的字段长度。假设您可以访问填充了真实数据的大型数据库,可以快速查询:

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

将为您提供所需的一切。

更新:请勿使用您获得的数字。显然,根据你的不确定性,将它填充一点,除非你有一个非常大的样本集。