我有一个简单的网络表单,允许未经身份验证的用户输入他们的信息,包括姓名。我将名称字段限制为 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。显然,他们使用不同的标准。
通过 Deed Poll 更改您的姓名允许 300 个字符;
您的姓名长度没有法律限制,但我们对您的全名施加了 300 个字符(包括空格)的限制。
NHS使用70 个字符作为患者姓名
患者姓名
格式/长度:最大 an70
护照办公室允许 30+30 第一个/最后一个,驾驶执照 (DVLA) 总共是 30 个。
请注意,其他组织对他们将在他们生成的文件上显示的内容有自己的限制 - 对于 HM Passport Office,您的名字和姓氏的限制是 30 个字符,对于 DVLA,您的限制是总共 30 个字符全名。
我们使用 50。
您真正要问的是一个相关但完全不同的问题:我想多久截断一次名称以使其适合数据库?答案取决于不同名称长度的频率以及选择的最大长度。这种担忧与对数据库使用的资源的担忧相平衡。考虑到 varchar 字段的不同最大长度之间的开销差异很小,我通常会犯错误,即永远不会被迫截断名称并使字段尽可能大。
请注意,许多文化都有“第二姓”,通常称为姓氏。例如,如果您与西班牙人打交道,他们会喜欢将姓氏与“姓氏”分开。
最好的办法是为名称组件定义数据类型,将这些数据类型用于姓氏的数据类型,并根据区域设置进行调整。
平均名字约为 6 个字母。剩下 43 个姓氏。:) 似乎你可以根据需要缩短它。
主要问题是您认为您将拥有多少行?我不认为 varchar(50) 会杀死你,直到你得到几百万行。
取决于谁将使用您的数据库,例如非洲名字将使用 varchar(20) 来分隔姓氏和名字。但是它因国家而异,但为了节省您的数据库资源和内存,分开姓和名字段并使用 varchar(30) 认为这会起作用。
对于用于存储名称的数据库字段和 HTML 表单中的字段,答案可能有所不同。
HTML 中名称字段的长度可以由 UX 指导。
有一项研究表明,在欧洲,引用:“名字的中位数为 6.5 个字符,姓氏的中位数为 7.1 个字符”。如果您查看下面的图表,您会发现每个名字和姓氏的 10 个字符足以获得最佳用户体验。