![]() |
1
12
部分取决于您的DBMS。有些(比如mysql 5)关心varchar(n)列的长度,而不是无限长的文本列;另一些(比如postgresql)则认为文本和varchar(n)在内部是相同的,只是在varchar(n)列上检查了长度。在PostgreSQL中编写varchar(65536)之类的东西是愚蠢的;如果您想要一个无限长的列,请选择文本并完成它。 当然,有时试图存储太长的值会破坏您的布局,或者允许某人通过选择一个没有空格的长名称来滥用系统(例如)。通常,我对这样的用户名字段所做的就是选择一个较长的长度,这样任何想要更长的用户名的人都会试图引起麻烦;64个字符是一个很好的整数值,并且似乎工作得很好。对于真实的姓名和地址(它们不像用户名那样经常显示给用户),您需要使用更长的名称和地址。您需要一个足够大的值来接受任何有效的输入,但不能太大,以至于有人可以在字段中填充一个千兆字节长的字符串来攻击您的系统。1024个字符是相当合理的:1K是一个足够小的文本量,可以很容易地使用,是一个整数,比任何正常的地址行或名称都大。
密码应该 从未 以明文形式存储,因此密码字段应该是一个字节数组或blob类型,其长度应足以存储正在使用的哈希函数的输出(对于更高级的方案,如srp-6a,也可以是正在使用的加密组的最大元素)。 |
![]() |
2
2
我喜欢16、32、64、128或256 |
![]() |
3
1
加倍估计。然后加倍以适应Unicode。 具有varchar(几乎所有do)的数据库对字段的惩罚非常小,这些字段被设计为保存较长的值,但不保存。你可以利用这一点。 |
![]() |
4
1
试着反过来考虑:我已经使用了现有的数据来获得合理的字段长度。假设您可以访问一个包含真实数据的大容量数据库,快速查询如下:
会给你所需要的一切。 更新:不要使用你得到的确切数字。很明显,根据你的不确定度,把它垫起来一点,除非你有一个非常大的样本集。 |
![]() |
5
1
我倾向于考虑一个字段的值可能有多长时间,然后加倍以保证安全。 例如,姓名:varchar(70) 邮箱:varchar(200) |
|
Johnny T · 基于当前值的SQL合并表[重复] 4 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 5 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 5 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 5 月前 |
![]() |
Sax · 规范化Google表格(第一步) 5 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 5 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 5 月前 |