2009-02-19 234 views
7

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

+0

请参阅:http://stackoverflow.com/questions/512614/what-are-the-recommended-database-column-sizes-for-names/ – PartialOrder 2009-02-19 03:51:55

回答

12

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

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

电子邮件地址可以,每个相关的RFC,我现在懒得查找的编号不超过320个字符。所以这是你的电子邮件字段的长度。 原来,SMTP限制字段的长度为256个字符;由于电子邮件地址必须放在括号内,最长的有效电子邮件地址实际上是254个字符。 (This page更详细。)所以您的电子邮件字段长度。

密码应NEVER被存储在纯文本,这样您的密码字段应该是一个字节数组或BLOB类型恰好足够长的时间来存储您所使用的哈希函数的输出(或最大元素的密码组在使用中,用于更高级的方案,如SRP-6a)。

+5

只有程序员认为64是一个“很好的回合值”:) – 2009-02-19 03:32:43

+1

你知道吗,我读过“nice round value”这一行,并没有想到它,直到你提到它。 :-) – 2009-02-19 03:38:42

+1

这对于我们三个人来说,我什至都没有想过,事实上,我对自己说:“如果你想要一个更大的领域,64是一个不错的数字,甚至可能是128,”我和我该死的编程思维模式 – UnkwnTech 2009-02-19 03:43:41

1

我倾向于做的是想想一个字段的价值可能会持续多长时间,然后加倍以保证安全。

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

2

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

1

双您的估计。然后加倍让它们适应unicode。

有varchars(几乎所有做)的数据库对于被设计为保存较长值但不保留的字段会产生很小的惩罚。你可以使用它来你的优势。

1

试着想一想:我已经使用现有的数据来获得合理的字段长度。假设你有机会获得一个良好的中小型数据库充满了真实的数据,快速查询,如:

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

会给你你需要的一切。

更新:不要使用你得到的数字。显然,除非你有一个非常大的样本集,否则取决于你的不确定性来填充它。