我有一个简单的 webform,允许未经身份验证的用户输入他们的信息,包括姓名。我将 name 字段限制为50个字符,以便与字段为 varchar(50)的数据库表保持一致,但随后我开始怀疑。
varchar(50)
使用类似 Text列类型的东西更合适吗? 还是应该将名称的长度限制在合理的范围内?
Text
我使用的是 SQLServer2005,以防您的响应中出现这种情况。
编辑: 我没有看到关于类似问题的 这个更广泛的问题。
我们用50。
如果在一个字段中是全名,我通常会用128-64/64来表示在不同字段中的第一个和最后一个-你永远不会知道。
我通常使用 varchar (255)(255是 MySQL 中 varchar 类型的最大长度)。
平均名字大约是6个字母。剩下43个姓氏。如果你愿意的话,你可以把它缩短。
主要的问题是你认为你会有多少行?我不认为 varchar (50)会杀死你,除非你得到几百万行。
英国政府数据标准目录 建议每个给定名称和姓氏为35个字符,或一个字段为70个字符以保存全名。
@ Ian Nelson: 我想知道其他人是否看到了这个问题。
假设你有两个领域。总共70个字符,名字35个,姓氏35个。但是,如果您有一个字段,您就会忽略名字和姓氏之间的空格,将您的名字改小1个字符。当然,“只”是一个字符,但这可能会造成输入全名和不输入全名的区别。因此,我建议改为“每个给定姓名和家庭姓名35个字符,或者一个字段用71个字符保存全名”。
请注意,许多 文化都有“第二个姓”,通常被称为姓氏。例如,如果你和西班牙人打交道,他们会很高兴把姓和姓分开。
最好的办法是为名称组件定义数据类型,为姓氏使用数据类型,并根据语言环境进行调整。
您真正要问的是一个相关的、但实质上不同的问题: 为了将名称放入数据库,我需要多长时间截断一次名称?答案既取决于不同名称长度的频率,也取决于所选择的最大长度。对数据库使用的资源的关注可以平衡这种关注。考虑到 varchar 字段的不同最大长度之间的开销差异是如此之小,我通常宁愿选择不被迫截断名称并尽可能大的字段。
我知道我在这个问题上迟到了,但我还是要加上这个评论,因为其他人很可能在未来带着类似的问题来到这里。
注意根据区域设置调整列大小。首先,它使您陷入了维护的噩梦之中,而不考虑人们迁移并随身携带他们的名字这一事实。
例如,具有这些额外姓氏的西班牙人可以移居并生活在一个讲英语的国家,并且可以合理地期望使用他们的全名。俄罗斯人除了姓之外还有父名,一些非洲人的名字可能比大多数欧洲人的名字要长得多。
考虑到潜在的行计数,尽可能使每列尽可能宽。我使用40个字符每个名字,其他给定的名字和姓氏,从来没有发现任何问题。
取决于谁将使用您的数据库,例如,非洲名称将与 varchar (20)的姓和名分开。然而,它是不同的国家,但为了节省您的数据库资源和内存,单独的姓氏和名字字段和使用 varchar (30)认为这将工作。
在英国,有一些政府标准能够成功地解决大部分英国人的问题——护照办公室、大不列颠驾驶及车辆牌照局、民意测验办公室和英国国民医疗服务体系(nHS)。很明显,他们用不同的标准。
通过契约投票改变你的名字 允许300个字符;
对于您的名字的长度没有法律限制,但是我们对您的全名设置了300个字符(包括空格)的限制。
英国国民保健服务(NHS)使用70个字符来表示患者姓名
病人名字 格式/长度: max an70
护照办公室 允许30 + 30的优先/最后和驾驶执照(DVLA)共有30个。
请注意,其他机构也会对他们出示的证件有自己的限制ーー英国皇家护照办公室(HM Passport Office)对你的名字和姓氏各有30个字符的限制,而 DVLA 对你的全名总共有30个字符的限制。
对于用于存储名称的数据库字段和 HTML 表单中的字段,答案可能不同。
HTML 中的 Name 文件的长度可以由用户体验指导。
有一个 学习表明,在欧洲,引用: “中位数是6.5个字符的名字和7.1个字符的姓氏”。如果你看看下面的图表,你会发现每个10个字符,给定的名字和姓氏,足以拥有最佳的用户体验。
还应该指出的是,由于显而易见的原因,政府数据库不能缩短姓名。你也许可以。他们负担得起额外的存储空间。你可能不会。