“姓名”字段的合理长度限制是多less?
我有一个简单的networking表单,将允许未经身份validation的用户input他们的信息,包括名称。 我给名称字段50个字符的限制,以配合我的数据库表字段是varchar(50),但后来我开始怀疑。
使用类似“文本”列types的东西更合适吗?还是应该将名称的长度限制在合理的范围内?
我正在使用SQL Server 2005,以防万一您的回应。
编辑:我没有看到类似的问题这个更广泛的问题。
英国政府数据标准目录为每个“给定名称”和“姓氏”build议35个字符,或者一个字段包含70个字符来保存全名。
我知道我迟到了,但是我会加上这个评论,因为其他人可能会在将来也会有类似的问题来这里。
注意根据语言环境调整列大小。 首先,它会让你做一个维护的噩梦,撇开人们迁徙的事实,并把他们的名字带走。
例如,那些有这些额外姓氏的西class牙人可以搬到英语国家并且生活在英语国家,并且可以合理地期望他们的全名被使用。 除了姓氏之外,俄罗斯人还有less数民族,一些非洲人的名字可能比大多数欧洲人的名字要长得多。
考虑到潜在的行数,让每列的宽度尽可能地合理。 我使用了40个字母作为名字,其他名字和姓氏,从来没有发现任何问题。
我通常使用varchar(255)(255是MySQL中varchartypes的最大长度)。
如果它是一个字段的全名,我通常会以128 – 64/64的首字母和最后一个分开的字段 – 你永远不知道。
@尼尔森:我想知道如果别人看到那里的问题。
假设你有分裂的领域。 总共70个字,名字35个,姓氏35个。 但是,如果你有一个领域,你忽略了分隔名字和姓氏的空间,短暂地改变你一个字符。 当然,这只是一个字符,但是这可能会导致有人input全名和不能input全名。 因此,我会将这个build议改为“给定名称和姓氏每个35个字符,或者一个字段保存全名的71个字符”。
我们用50。
你真正要问的是一个相关的,但是完全不同的问题:为了使它们适合数据库,我多频繁地截断名称? 答案取决于不同长度名称的频率以及所选的最大长度。 这个问题与数据库使用的资源问题有关。 考虑到一个varchar字段的不同最大长度之间有多less开销差异,我通常会犯错误,而不会被迫截断一个名字,并使字段像我敢的一样大。
在英国,有一些政府标准成功地处理了大部分英国人口 – 护照办公室,驾驶员和车辆许可证局,契约调查办公室和NHS。 显然,他们使用不同的标准。
通过契约改变你的名字允许300个字符 ;
您的姓名的长度没有法定限制,但是我们会为您的全名限制300个字符(包括空格)。
NHS使用70个字符作为患者姓名
患者姓名
格式/长度:最多an70
护照办公室允许30 + 30第一/最后和驾驶执照(DVLA)是30总数。
请注意,其他组织对于他们出示的文件将会有自己的限制 – 对于HM Passport Office,您的姓名和姓氏的限制为30个字符,DVLA的限制总共为30个字符全名。
平均名字是大约6个字母。 剩下43个姓。 :)似乎你可以缩短它,如果你喜欢。
主要问题是你认为你会有多less行? 我不认为varchar(50)会杀了你,直到你有几百万行。
请注意,许多文化有“第二姓”通常被称为姓氏。 例如,如果你正在和西class牙人打交道,他们会欣赏把姓氏与“姓氏”分开。
最好的办法是为名称组件定义一个数据types,将这些数据types用于姓氏和调整,具体取决于语言环境。
取决于谁将使用你的数据库,例如非洲名称将与varchar(20)的名字和名字分开。 但是,不同的国家,不同的国家,但为了节省您的数据库资源和内存,分隔姓氏和名字字段,并使用varchar(30)认为将工作。