2008-08-27 1471 views
124

我有一个简单的网络表单,将允许未经身份验证的用户输入他们的信息,包括名称。我给名称字段50个字符的限制,以配合我的数据库表字段是varchar(50),但后来我开始怀疑。什么是“姓名”字段的合理长度限制?

使用类似文本列类型的东西更合适吗?还是应该将名称的长度限制在合理的范围内?

我正在使用SQL Server 2005,以防万一您的响应中出现问题。

编辑:我没有看到this broader question关于类似的问题。

+2

需要注意的是,在这个全球化时代,varchar通常不是正确的数据类型,因此您应该使用nvarchar。 – Tao 2010-07-16 07:45:54

+0

@陶:因为他使用MS SQL Server,我同意。但VARCHAR *是*其他SQL实现中的正确数据类型,它更好地支持UTF-8。 – dan04 2010-12-22 07:13:56

+1

检查[这个相关的问题](http://stackoverflow.com/questions/20958/list-of-standard-lengths-for-database-fields#21012)关于这个问题的很多讨论。 – 2008-08-27 15:43:29

回答

127

UK Government Data Standards Catalogue表明35个字符的每个给定的名字和姓氏,或70个字符的单场举行的全名的。

+3

该链接需要更新截至2010年10月22日。我google搜索:网站:*。gov.uk命名“35个字符”,并找到此文档https://www.justice.gov。uk/guidance/docs/electoral-reg-standards.pdf – 2010-10-22 20:01:31

6

如果它的全名在一个领域,我一般用128去 - 64/64的第一个和最后在不同的领域 - 你永远都不会知道。

9

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

+20

你还在你的图形用户界面和其他媒体上保留了255个字符的空间,其中第一个/最后一个名字被显示? ;-) – AndrewBourgeois 2014-11-12 13:22:25

1

平均名字大约是6个字母。这留下了43个姓。 :)似乎你可以缩短它,如果你喜欢。

主要问题是您认为您会有多少行?我不认为varchar(50)会在你获得数百万行之前杀死你。

+5

如果varchar(20)列中的值在10到15个字符之间,并且在varchar(50)列中有相同的5000万个值,那么它们将占用完全相同的空间。这是varchar的重点,与char相反。 – Tao 2010-07-16 07:43:34

+0

@Tao查看http://stackoverflow.com/questions/11132357/varchar20-and-varchar50-are-same – 2012-06-21 06:02:22

5

@Ian Nelson:我想知道其他人是否会在那里看到问题。

假设你有拆分字段。总共有70个字符,名字35个,姓氏35个。但是,如果您只有一个字段,则会忽略分隔名字和姓氏的空格,因此只能将您改为1个字符。当然,这只是“一个”字符,但是这可能会导致某人输入全名和某人不一致。因此,我会将该建议更改为“每个给定名称和系列名称为35个字符,或者一个字段为71个字符来保存全名”。

1

注意,许多文化有“第二姓氏”通常被称为姓氏。例如,如果你与西班牙人打交道,他们会欣赏将姓氏与“姓氏”分开。

最好的办法是定义一个数据类型名称组件,使用这些用于姓数据类型并根据语言环境调整。

2

你真正要问的是一个相关的,但实质上不同的问题:为了使它们适合数据库,我需要多少次截断名称?答案取决于不同长度名称的频率以及所选的最大长度。这种担忧与对数据库使用的资源的担忧相平衡。考虑到varchar字段的不同最大长度之间有多么小的开销差异,我通常会犯错,因为永远不会被迫截断一个名称并使字段与我敢于一样大。

25

我知道我迟到了,但我会加上这个评论,因为其他人可能会在未来出现类似的问题。

请注意根据区域设置调整列大小。首先,它会为你设置一个维护噩梦,撇开人们迁徙的事实,并把他们的名字与他们一起。

例如,那些带有这些姓氏的西班牙人可以搬到英语国家并生活在英语国家,并且可以合理预期他们的全名被使用。除了姓氏之外,俄​​罗斯人还有父权制,一些非洲人的姓名可能比大多数欧洲人的姓名长得多。

请考虑到潜在的行数,让每列的宽度尽可能地合理。我使用40个字符作为名字,其他名字和姓氏,并且从未发现任何问题。

0

取决于谁将使用您的数据库,例如非洲名称将使用varchar(20)来分隔姓氏和名字。然而它不同于国家,不同的国家,但为了节省你的数据库资源和内存,单独的姓和名字段,并使用varchar(30)认为这将起作用。

3

在英国,有一些政府标准成功处理了英国的大部分人口 - 护照办公室,司机&车辆许可代理机构,契约调查办公室和NHS。显然,他们使用不同的标准。

改变你的名字由契约投票allows 300 characters;

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

NHS uses 70 characters for patient names

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

的护照办公室allows 30+30 first/last和驾驶执照(DVLA)为30总。

请注意,其他组织将对他们将生成的文档显示的内容有他们自己的限制 - 对于HM Passport Office,您的姓名和姓氏的限制为30个字符,DVLA的限制是总共30个字符为您的全名。