推荐的姓名数据库列大小是多少?

4
关于数据库设计,针对某些字段,比如名字的姓、中间名和名字本身,有没有什么推荐的列大小?此外,一个中间名标准的字符大小是否安全,或者应该为中间缩写留出更多的空间?
具体而言,我正在寻找的是大小,可以让这个问题在国际使用中不用担心。我见过一些两个字符的中间缩写,所以我觉得单个字符可能不是一个好主意,但我很想知道是否已经有任何指南。

请参考 Stack Overflow 上的这个问题 http://stackoverflow.com/questions/128099/what-is-the-longest-human-name-you-can-expect,了解为什么许多假设(如名字的长度、中间名或姓氏的数量、名称中不同部分的数量等)可能对其他国家完全不适用。 - mghie
@mghie - 这就是为什么我试图了解推荐的准则。很可能很难使用一个大小来捕获所有内容,但如果我们能够捕获99.9%的名字和姓氏,并为多个中间名字提供足够的空间,那么我们应该没问题。 - rjzii
@Rob:好的,提供另一个问题的链接是有原因的:这并不简单。并非每个人都有名字和姓氏,可能还有一些中间名字头字母。请查看链接问题中的答案,其中一些专门涉及名称数据库列的需求。 - mghie
4个回答

9

ISO目前还没有发布有关人名的命名标准(尚未),不过我听说初步草案正在最高层级传阅。

:)

说真的,64个字符左右对于99.99%的名字和姓氏来说应该足够了 - 无论是哪种语言。我从来没有见过除MI之外的其他字符(虽然你说得对,许多人有多个MI)。

顺便说一句:除非我搞错了,电子邮件地址在技术上可以长达320个字符,并且可以包含!# $%&'* + - / =?^ _` {|}〜和“.”,但不能作为第一个或最后一个字符出现,也不能连续出现两次或更多次。

PS. 我宠物兔的名字是“His Imperial Majesty Theopolops Bunny Galore”。不用说,这在兽医的数据库中被截断了。我想他们把它写成了“His Imperial Maj”。就这样吧。


6

1

我不确定长度,但如果您要进行国际化,则一定要选择nvarchar,因为它将支持您可能遇到的任何“扩展”ASCII字符。 nvarchar的另一个好处是它具有固定的最大长度,但不会将值填充到该长度。

换句话说,我的名字将被存储为

'Andrew'

在一个nvarchar(20)字段中,但实际上会被存储。

'Andrew              '

在一个char(20)字段中。因此,考虑到这一点,我会为名称选择一个较大的数字,并认为您不会浪费使用nvarchar的额外空间。


这样可以节省空间,但使用固定大小记录的表进行读写更有效率。 - Dana the Sane
1
@Dana -- 在我增加检索值的修整复杂度之前,我想要确信我确实需要效率。我的个人感觉是,你应该为不同类型的数据使用不同的类型,对于固定的数据则使用固定类型。Y/N 可以是 char(1),但名称应该是可变的。 - tvanfosson
1
你正在比较苹果和橙子 - nvarchar(20)的非国际化版本是varchar(20),它不会像nchar(20)和char(20)一样填充空格。 - Andrzej Doyle

1

个人认为这取决于您合理预期需要存储多少数据。即使您将拥有一百万个名称,使用char(64)或更大的每个名称可能不会有太大影响。如果大小是一个问题,您可以从32开始,并使用alter column增加大小,但请记住,对于大型表格,这是一项昂贵的操作。


修改总是不好的建议,特别是在大小方面。 - Vishnu J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接