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个字符;
NHS使用70个字符作为患者姓名
护照办公室允许30/30优先/最后和驾驶执照(DVLA)总共为30。
您真正要问的是一个相关但又截然不同的问题:我想多久截断一次名称以使其适合数据库?答案取决于名称不同长度的频率以及所选择的最大长度。通过数据库使用的资源之间的平衡可以平衡这种担忧。考虑到varchar字段的不同最大长度之间的开销差异很小,我通常会犯错误,永远不会被迫截断名称并使该字段尽可能大。 我们用50 请注意,许多文化都有"第二姓氏",通常被称为姓氏。例如,如果您要与西班牙人打交道,他们将把自己的姓氏与"姓氏"分隔开来会很高兴。 最好的选择是为名称组件定义数据类型,为姓氏使用数据类型,并根据语言环境进行调整。 具体取决于谁将使用您的数据库,例如,非洲名将使用varchar(20)来区分姓和名。但是,每个国家/地区都不相同,但是为了节省您的数据库资源和内存,将姓氏和名字字段分开并使用varchar(30)认为可行。 平均名字约为6个字母。剩下43个姓。 :)似乎可以根据需要缩短它。 主要问题是您认为会有几行?我认为varchar(50)不会杀死您,直到您获得数百万行。 |