我有一个简单的网络表单,允许未经身份验证的用户输入他们的信息,包括姓名。我给名字字段限制了50个字符以与我的数据库表一致,其中字段是varchar(50),但后来我开始怀疑。
使用Text列类型更合适,还是应该将名称的长度限制在合理范围内?
我正在使用SQL Server 2005,以防万一在您的回复中。
编辑:我没有看到有关类似问题的this broader question。
答案 0 :(得分:130)
UK Government Data Standards Catalogue为每个给定名称和姓氏建议35个字符,或者为单个字段保留全名70个字符。
答案 1 :(得分:25)
我知道我迟到了,但无论如何我会添加这条评论,因为其他人可能会在未来有类似的问题来到这里。
请注意根据区域设置调整列大小。首先,它会让您陷入维护噩梦,撇开人们迁移的事实,并随身携带他们的名字。
例如,拥有这些额外姓氏的西班牙人可以搬到英语国家,并且可以合理地期望使用他们的全名。除了姓氏之外,俄罗斯人还有一些patronymics,一些非洲名字可能比大多数欧洲名字长得多。
考虑到潜在的行数,请尽量使每列尽可能宽。我使用40个字符作为名字,其他名字和姓氏,从未发现任何问题。
答案 2 :(得分:8)
我通常使用varchar(255)(255是MySQL中varchar类型的最大长度)。
答案 3 :(得分:6)
如果它是一个字段中的全名,我通常会在第一个和第二个字段中使用128 - 64/64在不同的字段中 - 你根本就不知道。
答案 4 :(得分:5)
假设您有分割字段。总共70个字符,名字35个,姓氏35个。但是,如果您有一个字段,则忽略用于分隔名字和姓氏的空格,将您更改为1个字符。当然,它只是“一个”一个角色,但这可能会让某个人输入他们的全名而另一个人没有。因此,我会将该建议更改为“每个给定名称和姓氏35个字符,或单个字段的71个字符以保存全名”。
答案 5 :(得分: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个字符。全名为。
答案 6 :(得分:2)
我们使用50.
答案 7 :(得分:2)
您真正要问的是一个相关但又截然不同的问题:我多久要截断一下名称以使其适合数据库?答案取决于不同长度的名称的频率以及所选的最大长度。对数据库使用的资源的担忧平衡了这种担忧。考虑到varchar字段的不同最大长度之间的开销差异很小,我通常会错误地从不被强制截断名称并使字段像我一样大。
答案 8 :(得分:1)
请注意,许多文化都有“第二个姓氏”,通常称为姓氏。例如,如果您与西班牙人打交道,他们会喜欢将姓氏与他们的姓氏分开。
最好的办法是为名称组件定义数据类型,将其用于姓氏的数据类型,并根据区域设置进行调整。
答案 9 :(得分:0)
平均名字约为6个字母。这留下了43个姓氏。 :)如果你愿意,似乎你可以缩短它。
主要问题是您认为您将拥有多少行?我不认为varchar(50)会在你获得数百万行之前杀死你。
答案 10 :(得分:0)
取决于谁将使用您的数据库,例如非洲名称将使用varchar(20)作为姓氏和名字分隔。然而,它因国家而异,但为了节省您的数据库资源和内存,将单独的姓氏和名字字段分开并使用varchar(30)认为这样可行。