我有一个简单的Web表单,它将允许未经身份验证的用户输入其信息,包括姓名。我给name字段提供了50个字符的限制,以使其与数据库表中的字段varchar(50)一致,但是随后我开始怀疑。
使用“文本”列类型之类的方法更合适还是应该将名称的长度限制为合理的范围?
我正在使用SQL Server 2005,以防您的响应变得很重要。
编辑:关于类似问题,我没有看到这个更广泛的问题。
我有一个简单的Web表单,它将允许未经身份验证的用户输入其信息,包括姓名。我给name字段提供了50个字符的限制,以使其与数据库表中的字段varchar(50)一致,但是随后我开始怀疑。
使用“文本”列类型之类的方法更合适还是应该将名称的长度限制为合理的范围?
我正在使用SQL Server 2005,以防您的响应变得很重要。
编辑:关于类似问题,我没有看到这个更广泛的问题。
Answers:
英国政府数据标准目录建议给定名称和姓氏每个35个字符,或单个字段70个字符以保留全名。
我知道我迟到了这一点,但无论如何我都会添加此评论,因为将来其他人很可能会提出类似的问题。
当心调整列的大小取决于语言环境。首先,它为您进行了一场维护噩梦,抛开了人们迁移并留下自己名字的事实。
例如,具有这些额外姓氏的西班牙人可以搬到并居住在英语国家/地区,并且可以合理地期望使用其全名。俄国人除了姓氏外还有其他名称,一些非洲名字可能比大多数欧洲名字更长。
考虑到潜在的行数,使每列尽可能地宽。我的名字,其他给定的名字和姓氏均使用40个字符,但从未发现任何问题。
我通常使用varchar(255)(255是MySQL中varchar类型的最大长度)。
如果在一个字段中使用全名,那么我通常会在单独的字段中使用128-64/64作为第一个和最后一个,您永远都不会知道。
@伊恩·尼尔森(Ian Nelson):我想知道其他人是否在那里看到问题。
假设您有多个字段。总共70个字符,姓氏35个,姓氏35个。但是,如果您有一个字段,则可以忽略将名字和姓氏分开的空格,只需将您的字符更改为1个字符即可。当然,它只是“一个”字符,但这可能会导致输入全名的人与不输入全名的人有所区别。因此,我将该建议更改为“给定名称和姓氏各35个字符,或单个字段保留全名71个字符”。
平均名字约为6个字母。剩下43个姓。:)似乎您可以根据需要将其缩短。
主要问题是您认为将拥有几行?我认为varchar(50)不会杀死您,直到您获得数百万行。
具体取决于谁将使用您的数据库,例如,非洲名将使用varchar(20)来区分姓和名。但是,每个国家/地区都不相同,但是为了节省您的数据库资源和内存,将姓氏和名字字段分开并使用varchar(30)认为可行。