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


138

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

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

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

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


1
查看此相关问题,以获取有关该主题的大量讨论。
克里斯·玛拉斯蒂·乔治

2
需要注意的是,在全球化时代,varchar通常不是正确的数据类型,您可能应该使用nvarchar。

@Tao:因为他使用的是MS SQL Server,所以我同意。但是,VARCHAR 其他对UTF-8有更好支持的SQL实现中正确的数据类型。
dan04 2010年

Answers:


142

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


3
2010年我的链接需要被更新为10月22日的用Google搜索:网站:* gov.uk名称“35个字符”,发现这个文档。justice.gov.uk/guidance/docs/electoral-reg-standards.pdf
Tony R

他们的链接似乎真的很糟糕...截至8/2012:webarchive.nationalarchives.gov.uk/+/http
Thomas B

6
我找到的最长的“合理”全名是“ Gisele Marie-Louise Marguerite LaFleche”(长度为39个字节)。
user1154664

:有点大54个字符 gw.geneanet.org/...
mestachs

3
新西兰限制全名:全名的长度必须少于100个字符(包括空格),并且不能包含符号或数字。我想姓可以使用连字符。
Glutnix

27

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

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

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

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


感谢您的回答,即使已经有一段时间了。
EndangeredMassa

9

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


30
您是否还在GUI和其他显示名字/姓氏的媒体中保留255个字符的空间?;-)
AndrewBourgeois 2014年

2
我曾经想过:“为什么不总是使用varchar(255)?” 现在,我意识到长度约束主要是针对UI的,而设计人员在设计UI时可以依赖这些约束,这就是要占用数据库中过多的空间。
jdg


6

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

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


2
遵循该文档的目的是使您可以与其他英国政府系统进行互操作,因此不能单独将70提升到71,然后每天将其命名,否则限制为70个字符的系统将切断您的文本。(您不应该将数据以两种形式存储在您自己的系统中。)实际上,情况变得更糟,因为全名不仅包括Family / Given,而且还包括Title和Suffix(对于每个字符,其上限均为35个字符),附加字段中最多可以包含143个有趣的字符。很想成为必须使用两种形式的名称存储交换数据的开发人员。
mmitchell

3
显然,该指南是基于这样的期望而写的:一个人可能具有冗长的“给定名称”(最多35个字符)或冗长的“姓氏”(最多35个字符),但是不太可能姓名的两个部分都那么长。
伊恩·纳尔逊

3

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

通过契约投票更改名称可以容纳300个字符 ;

您的名字长度没有法律限制,但是我们对您的全名强加了300个字符(包括空格)的限制。

NHS使用70个字符的病人姓名

患者姓名
格式/长度:最大an70

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

请注意,其他组织对在其产生的文件上显示的内容会有自己的限制-对于HM Passport Office,您的姓氏和姓氏各限制为30个字符,而对于DVLA,您的姓氏限制为总共30个字符全名。



2

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


1

请注意,许多文化都有“第二姓氏”,通常被称为姓氏。例如,如果您要与西班牙人打交道,他们会很喜欢将姓氏与“姓氏”分开。

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


在统计上具有较小值的区域设置中减小限制没有好处-字段的大小不会影响所占用的空间,除非某些值实际上占用了那些允许的额外字符(然后这意味着无论如何您都做出了正确的选择) !

0

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

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


6
如果在varchar(20)列中有5000万个值,介于10到15个字符之间,而在varchar(50)列中具有相同的5000万个值,则它们将占用完全相同的空间。这就是varchar的重点,而不是char。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.