关于sql:人员“姓名”字段的合理长度限制是多少?

What is a reasonable length limit on person “Name” fields?

我有一个简单的Web表单,该表单将允许未经身份验证的用户输入其信息,包括姓名。 我给name字段提供了50个字符的限制,以使其与数据库表中的字段为varchar(50)一致,但是随后我开始怀疑。

使用诸如Text列类型之类的方法更合适还是应该将名称的长度限制为合理的范围?

我正在使用SQL Server 2005,以防您的响应很重要。

编辑:关于类似问题,我没有看到这个更广泛的问题。


英国政府数据标准目录建议给定的姓名和姓氏每个35个字符,或单个字段包含全名的70个字符。


我知道我在这方面迟到了,但是无论如何我都会添加此评论,因为将来其他人很可能会提出类似的问题。

当心调整列大小取决于语言环境。首先,它为您进行了一场维护噩梦,抛开了人们迁移并留下自己名字的事实。

例如,具有这些额外姓氏的西班牙人可以搬到并居住在英语国家/地区,并且可以合理地期望使用其全名。俄国人除了姓氏外还有其他名称,一些非洲名字可能比大多数欧洲名字更长。

考虑到潜在的行数,使每列尽可能地宽。我的名字,其他姓氏和姓氏均使用40个字符,但从未发现任何问题。


我通常使用varchar(255)(255是MySQL中varchar类型的最大长度)。


如果在一个字段中使用全名,那么我通常会在单独的字段中使用128-64/64作为第一个和最后一个,您永远都不会知道。


@伊恩·尼尔森(Ian Nelson):我想知道其他人是否在那里看到问题。

假设您有多个字段。总共70个字符,姓氏35个,姓氏35个。但是,如果您有一个字段,则可以忽略将名字和姓氏分开的空格,只需将您的字符更改为1个字符即可。当然,它只是"一个"字符,但这可能会导致输入全名的人与不输入全名的人有所区别。因此,我将该建议更改为"给定名称和姓氏各35个字符,或单个字段保留全名71个字符"。


在英国,有一些政府标准可以成功处理英国大部分人口,包括护照办公室,驾驶员和车辆执照颁发机构,契约民意调查办公室以及NHS。显然,他们使用不同的标准。

通过契约投票更改您的名字允许300个字符;

There is no legal limit on the length of your name, but we impose a limit of 300 characters (including spaces) for your full name.

NHS使用70个字符作为患者姓名

PATIENT NAME
Format/length: max an70

护照办公室允许30/30优先/最后和驾驶执照(DVLA)总共为30。

Note that other organisations will have their own restrictions about what they will show on the documents they produce — for HM Passport Office the limit is 30 characters each for your forename and your surname, and for the DVLA the limit is 30 characters in total for your full name.


您真正要问的是一个相关但又截然不同的问题:我想多久截断一次名称以使其适合数据库?答案取决于名称不同长度的频率以及所选择的最大长度。通过数据库使用的资源之间的平衡可以平衡这种担忧。考虑到varchar字段的不同最大长度之间的开销差异很小,我通常会犯错误,永远不会被迫截断名称并使该字段尽可能大。


我们用50


请注意,许多文化都有"第二姓氏",通常被称为姓氏。例如,如果您要与西班牙人打交道,他们将把自己的姓氏与"姓氏"分隔开来会很高兴。

最好的选择是为名称组件定义数据类型,为姓氏使用数据类型,并根据语言环境进行调整。


具体取决于谁将使用您的数据库,例如,非洲名将使用varchar(20)来区分姓和名。但是,每个国家/地区都不相同,但是为了节省您的数据库资源和内存,将姓氏和名字字段分开并使用varchar(30)认为可行。


平均名字约为6个字母。剩下43个姓。 :)似乎可以根据需要缩短它。

主要问题是您认为会有几行?我认为varchar(50)不会杀死您,直到您获得数百万行。