8

您用于常见数据库字段(如名字、姓氏、电子邮件、密码等)的大小是多少?我在很多博客、论坛、电子商务等数据库中都看到了这些公共字段。但我不知道这些公共字段的大小是否有一些参考或默认值。所以,我想知道您用于选择常见字段大小的方法/参考/基础。

4

5 回答 5

13

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

当然,有时尝试存储太长的值会破坏您的布局,或者允许某人通过选择没有空格的长名称来滥用系统(例如)。通常我对这样的用户名字段所做的只是选择一个较大的长度,这样任何想要更长用户名的人都会试图造成麻烦;64 个字符是一个不错的整数值,而且看起来效果很好。对于真实姓名和地址(不像用户名那样经常向用户显示),您需要使用更长的时间。您需要一个足够大的值,它可以接受任何有效的输入,但又不能大到有人可以在字段中塞入一个千兆字节长的字符串来攻击您的系统。1024 个字符是相当合理的:1k 是一个足够小的文本,可以轻松使用,是一个整数,并且比任何正常的地址行或名称都大。

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

密码永远不应该以明文形式存储,因此您的密码字段应该是一个字节数组或 BLOB 类型,其长度应足以存储您正在使用的哈希函数的输出(或正在使用的加密组的最大元素,对于更高级的方案,例如SRP-6a)。

于 2009-02-19T03:31:01.443 回答
1

我倾向于做的是考虑一个字段的值可能有多长,然后将其加倍以确保安全。

例如名称:varchar(70) 电子邮件:varchar(200)

于 2009-02-19T03:38:23.797 回答
1

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

于 2009-02-19T04:05:49.940 回答
1

将您的估计翻倍。然后将它们加倍以适应 unicode。

具有 varchars 的数据库(几乎所有)都会对旨在保存更长值但不保存的字段产生非常小的惩罚。你可以利用它来发挥你的优势。

于 2009-02-19T04:31:55.993 回答
1

试着反过来想一想:我已经使用现有数据来获得合理的字段长度。假设您可以访问一个充满真实数据的大型数据库,一个快速查询如下:

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

会给你你需要的一切。

更新:不要使用你得到的确切数字。显然,除非您有一个非常大的样本集,否则根据您的不确定性将其填充一点。

于 2009-02-19T04:36:51.973 回答