“Name”字段的合理长度限制是多少?

166

我有一个简单的网络表格,允许未经身份验证的用户输入他们的信息,包括姓名。我将姓名字段的限制设置为50个字符,以与我的数据库表中的字段 varchar(50) 相一致,但是我开始怀疑。

使用类似 Text 的列类型更合适,还是应该将姓名的长度限制在合理范围内?

我正在使用 SQL Server 2005,如果这对您的回答有影响,请告诉我。

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


1
请查看这个相关问题,了解更多关于此主题的讨论。 - Chris Marasti-Georg
2
需要注意的是,在全球化时代,varchar并不是通常使用的正确数据类型,有很大可能你应该使用nvarchar。 - Tao
@Tao:既然他正在使用MS SQL Server,我同意。但是在其他对UTF-8支持更好的SQL实现中,VARCHAR 确实 是正确的数据类型。 - dan04
通常情况下,那些名字很长的人通常会有一个缩写版本的名字。这意味着,如果你限制在70个字符(35个汉字)的长度上,那么当有人的名字超过71个字符时,不要感到难过,因为他们很可能有一个远远少于70/35字符的缩写版本。 - undefined
12个回答

168

英国政府数据标准目录建议将名字和姓氏的每个字段长度限制为35个字符,或者使用单个字段最多可以容纳70个字符。


3
链接需要更新至2010年10月22日。我在谷歌上搜索了:site:*.gov.uk Name "35 characters",并找到了这份文档 https://www.justice.gov.uk/guidance/docs/electoral-reg-standards.pdf - Tony R
7
我找到的最长“合理”的全名是“吉赛尔·玛丽-路易丝·玛格丽特·拉弗莱什”,共39个字节。 - user1154664
一个稍微长一点的54个字符的链接:http://gw.geneanet.org/gounou?lang=fr;p=eric;n=de+borchgrave+de+preud+homme+d+hailly+de+nieuport - mestachs
3
新西兰限制全名长度不得超过100个字符,包括空格,并且不能包含符号或数字。尽管姓氏中可以使用连字符。 - Glutnix
英国护照实际上只接受30个姓氏和30个其他名称,总共60个。还要考虑到他们用ICAO音译替换了重音和其他奇特字符。 - Giacomo Lacava
显示剩余2条评论

31

我知道我晚了,但我还是要加上这个评论,因为将来可能会有其他人遇到类似的问题。

小心根据地区调整列大小。首先,这会给你带来维护上的噩梦,更不用说人们会迁移,并且带走他们的名字。

例如,西班牙人带着那些额外的姓氏可以移居到说英语的国家,并且可以合理地期望使用他们的全名。俄罗斯人除了姓氏还有父称,一些非洲名字可能比大多数欧洲名字要长得多。

尽量使每个列宽度合理地宽,考虑到潜在的行数。我为名字、其他名字和姓氏分别使用40个字符,从未遇到任何问题。


感谢您的回答,即使已经过了一段时间。 - EndangeredMassa
是的,但如何推理呢?这才是关键。你只是在说长度可以是任意的。 - Dmitry

10

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


40
你是否在GUI和其他媒体中为名字的显示预留了255个字符的空间?;-) - AndrewBourgeois
5
我曾经认为:“为什么不总是使用varchar(255)?”现在我意识到长度限制主要是为了UI的设计,使得设计师可以在设计UI时依赖这些限制,同时也是为了避免在数据库中占用过多空间。 - jdg
varchar(255) 意味着最大长度为 255 字节(而非字符)。 - Michal - wereda-net

8
在英国,有几个政府标准成功地处理了大部分英国人口——护照办公室、驾驶员和车辆许可机构、契约更名办公室和国民医疗服务体系。他们显然使用不同的标准。
通过契约更名 允许300个字符

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

NHS为患者名称使用70个字符

患者姓名
格式/长度:最多70个字符

护照办公室 允许30+30个名字/姓氏 和驾驶执照(DVLA)总共30个字符。
请注意,其他组织对于他们制作的文件所显示的内容也会有自己的限制——对于英国护照办公室来说,名字和姓氏各限制30个字符,而对于英国驾照管理局来说,全名总共限制30个字符。

1
请注意:"deedpolloffice[.]com"不是政府部门,而是一个完全随意的私人公司,竟然还敢向您收费,以便为您生成一个PDF文件,而您自己也可以打出来。 - ash
作为一个和你一样的英国人,这对我非常有用。谢谢! - undefined

7
如果一个字段中有完整的姓名,我通常会使用128-64/64来分别填写名和姓 - 你永远不知道。

我认为64个字符足以容纳完整的姓名。 - DollarAkshay

6

@Ian Nelson: 我想知道其他人是否也看到了这个问题。

假设你有分割字段。总共有70个字符,35个字符用于名字和35个字符用于姓氏。然而,如果你只有一个字段,你会忽略分隔名字和姓氏的空格,让你少1个字符。当然,“只”是一个字符,但这可能会导致某些人输入不完整的姓名。因此,我建议将该建议更改为“给定名称和家庭名称各35个字符,或者一个用于保存全名的单个字段71个字符”。


2
遵循该文档的目的是为了使您与其他英国政府系统互操作,因此您不能将70个字符单独提高到71个字符并结束,否则具有70个字符限制的系统将截断您的文本。(您不应在自己的系统中以两种形式存储数据。)事实上情况会更糟,因为全名不仅包括姓和名,还包括头衔和后缀,每个都有35个字符的限制,附加字段最多可达143个字符。对于必须与两种名称存储形式交换数据的开发人员来说,这真是太糟糕了。 - mmitchell
3
显然,该指南的撰写者预期个人姓名可能会很长(长达35个字符)或姓氏可能会很长(长达35个字符),但两部分名称都如此冗长的情况不太可能出现。 - Ian Nelson
从我的角度来看,你不应该在数据库中保存“全名”,而是应该分别保存名字和姓氏,并在需要时将它们连接起来。 - Pedro Massango

3
“答案可能因用于存储名称的数据库字段和HTML表单中的字段而异。
在HTML表单中,名称字段的长度可以由用户体验(UX)来指导。
有一项研究显示,在欧洲,引用:“名字的中位数为6.5个字符,姓氏的中位数为7.1个字符”。如果您查看下面的图表,您会发现每个名字和姓氏都需要10个字符才能获得最佳的用户体验。”

enter image description here

还应该注意,政府数据库出于明显的原因不能缩短名称。他们可以承担额外的存储空间,而你可能做不到。

2
你真正要问的是一个相关但实质上不同的问题:为了适应数据库,我想截断名称的频率有多高?答案取决于不同长度名称的频率以及所选择的最大长度。这个问题需要考虑到数据库使用的资源。考虑到 varchar 字段不同最大长度之间几乎没有任何开销差异,我通常会倾向于从不强制截断名称,并尽可能将字段设得更大。

1
我们使用50。

1
请注意,许多文化中都有“次姓氏”,通常称为家族名称。例如,如果您与西班牙人打交道,他们会欣赏将家族名称与他们的“姓氏”分开。
最好的方法是为姓名组件定义一个数据类型,使用它们来创建姓氏的数据类型,并根据区域设置进行微调。

在统计值较小的区域中,将限制范围缩小并没有任何优势 - 字段的大小不会影响所占用的空间,除非某些值实际上占用了这些额外允许的字符(那么这意味着您已经做出了正确的选择)! - Tao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接