数据库字段的标准长度列表


394

我正在设计一个数据库表,并再次问自己一个愚蠢的问题:名字字段应持续多长时间?

任何人都没有列出最常用字段的合理长度的列表,例如名字,姓氏和电子邮件地址?


1
只要确保您在名称中允许使用非字母字符即可!用他的姓氏指向连字符
Chris Marasti-Georg

3
有关最大电子邮件地址长度,请参阅“有效电子邮件ID的最大长度”。
2011年

2
注意:不需要“名字”和“姓氏”。像我一样,有些人只有一个名字。(证明:web.archive.org/web/20130115074449/http://saizai.com/...
西

URL怎么样,例如博客或个人资料链接?
AlikElzin-kilaka

如果名字只要这个名字就搞砸了gintama.wikia.com/wiki/Jugem_Jugem
绚瀬絵里

Answers:


34

W3C的建议:

如果设计一个可以接受来自不同背景的人的名字的表单或数据库,则应问自己是否真的需要为给定名字和姓氏提供单独的字段。

…请记住,在某些文化中,名字可能比您的名字长很多。… 避免限制数据库中名称的字段大小。特别是,不要假设UTF-8中的四个字符的日语名称适合四个字节,您实际上可能需要12个字符。

https://www.w3.org/International/questions/qa-personal-names

对于数据库字段,这VARCHAR(255)是一个安全的默认选择,除非您确实可以提出使用其他内容的充分理由。对于典型的Web应用程序,性能将不是问题。不要过早优化。


26
我问这个问题已经十年了。我有10年的工作经验,我倾向于同意您的看法。
Patrick McElhaney

2
您如何精确地在信封上打印255个字符的名称?
迈克尔·波特'18

316

我刚刚在美国的数百万客户中查询了我的数据库。

  • 名字的最大长度为46。我为50。(当然,其中只有500个超过25,并且在所有情况下,数据导入都会导致该字段中的额外垃圾堆积。)

  • 相似。

  • 电子邮件地址最多不能超过62个字符。大多数较长的实际上是用分号分隔的电子邮件地址列表。

  • 街道地址不能超过95个字符。长的都是有效的。

  • 最大城市长度为35。

对于美国民众来说,这应该是一个不错的统计分布。如果要考虑本地化,数字可能会有很大差异。


4
与您的数据库相比,我可以访问的数据库很小,但是即使在那儿,我也发现了138个字符的电子邮件地址。本地部分组件显然是某种LDAP(或AD?)可分辨名称。
2011年

2
电话号码呢?
2012年

@EricZBeard“街道地址”是否包含门牌号码?
noɥʇʎԀʎzɐɹƆ

3
数据库中电子邮件地址的平均长度不是推荐的好方法。电子邮件地址的最大有效长度为254个字符,并且应为数据库中指定的长度。此外,在同一列中包含电子邮件地址列表对我来说意味着您的数据未规范化,因此进一步使您的答案无效。
马里奥

1
@MGOwen首先,您不知道数据库的用途,在某些设置中,某些人会因为诸如电子邮件的“过长”之类的小问题而被拒绝访问,这可能是一个主要问题。其次,您发布的链接显示“最长的有效密码是89”,正如该密码所说的是62。哪个是对的?如果您只想选择一个任意数字,或者您有正当的理由,例如姓名必须包含在地址中,则可以。但是仍然有道理,如果有疑问,请参考规范。我仍然认为,一个人说“我的数据库在x处最大”是轶事。
马里奥(Mario),

170

英国政府数据标准目录详细介绍了此类事情的英国标准。对于“给定名称”和“姓氏”,建议使用35个字符;对于保留全名的单个字段,建议使用70个字符;对于电子邮件地址,建议使用255个字符。除其他外..


3
2010年我的链接需要被更新为10月22日的用Google搜索:网站:* gov.uk名称“35个字符”,发现这个文档。justice.gov.uk/guidance/docs/electoral-reg-standards.pdf
Tony R

20
只是想一想...考虑到需要一个空格,在单个字段中姓氏和姓氏不应该包含71个字符吗?
Joseph Redfern

8
好吧,很明显,他们期望偶尔使用长姓氏(最多35个字符)和偶然使用长姓氏(最多35个字符),但不一定期望一个人同时使用冗长的姓氏和姓氏。那只是贪婪的;-)
伊恩·纳尔逊

6
如果El Tahir El Fadil El Siddig Abderrahman Mohammed Ahmed Abdel Karim El Mahdi先生在填写在线表格时实际上使用了他的所有名字,我会印象深刻。我有两个中间名,但是除了正式(即政府)形式外,我只使用其中一个。
莱昂2015年

2
@ ian-nelson根据RFC 3696的电子邮件长度:该限制是“本地部分”(在“ @”之前)的最大值为64个字符(八位字节),而在域部分(在之后)的最大值为255个字符(八位字节) (@)),总长度为320个字符。即使很少遇到,处理电子邮件的系统也应该准备处理那么长的地址。
Piotr Nawrot

53

一些可能正确的列长

                            Min Max

Hostname                    1   255
Domain Name                 4   253
Email Address               7   254
Email Address [1]           3   254
Telephone Number            10  15      
Telephone Number [2]        3   26  
HTTP(S) URL w domain name   11  2083        
URL [3]                     6   2083    
Postal Code [4]             2   11
IP Address (incl ipv6)      7   45
Longitude                   numeric 9,6
Latitude                    numeric 8,6
Money[5]                    numeric 19,4

[1] Allow local domains or TLD-only domains
[2] Allow short numbers like 911 and extensions like 16045551212x12345
[3] Allow local domains, tv:// scheme
[4] http://en.wikipedia.org/wiki/List_of_postal_codes. Use max 12 if storing dash or space
[5] http://stackoverflow.com/questions/224462/storing-money-in-a-decimal-column-what-precision-and-scale

冗长的个人名字

个人名称可以是Polynym(具有多个可排序名称组成部分),Mononym(仅具有一个组成部分的名称)或Pictonym(由图片表示的名称-由于像Prince这样的人而存在)。

一个人可以有多个名字,并且扮演各种角色,例如法律,海事,残障,女仆,优先,SOBRIQUET,伪狂等。一次”。

一些例子:

names: [
  {
    type:"POLYNYM",
    role:"LEGAL",
    given:"George",
    middle:"Herman",
    moniker:"Babe",
    surname:"Ruth",
    generation:"JUNIOR"
  },
  {
    type:"MONONYM",
    role:"SOBRIQUET",
    mononym:"The Bambino" /* mononyms can be more than one word, but only one component */
  },
  {
    type:"MONONYM",
    role:"SOBRIQUET",
    mononym:"The Sultan of Swat"
  }
]

要么

names: [
  {
    type:"POLYNYM",
    role:"PREFERRED",
    given:"Malcolm",
    surname:"X"
  },
  {
    type:"POLYNYM",
    role:"BIRTH",
    given:"Malcolm",
    surname:"Little"
  },
  {
    type:"POLYNYM",
    role:"LEGAL",
    given:"Malik",
    surname:"El-Shabazz"
  }
]

要么

names:[
  {
    type:"POLYNYM",
    role:"LEGAL",
    given:"Prince",
    middle:"Rogers",
    surname:"Nelson"
  },
  {
    type:"MONONYM",
    role:"SOBRIQUET",
    mononym:"Prince"
  },
  {
    type:"PICTONYM",
    role:"LEGAL",
    url:"http://upload.wikimedia.org/wikipedia/en/thumb/a/af/Prince_logo.svg/130px-Prince_logo.svg.png"
  }
]

要么

names:[
  {
    type:"POLYNYM",
    role:"LEGAL",
    given:"Juan Pablo",
    surname:"Fernández de Calderón",
    secondarySurname:"García-Iglesias" /* hispanic people often have two surnames. it can be impolite to use the wrong one. Portuguese and Spaniards differ as to which surname is important */
  }
]

给定名称,中间名,姓氏可以是多个单词,例如"Billy Bob" ThorntonRalph "Vaughn Williams"


5
这是非常有用的信息,但不是超级有用的答案。下次我需要“可能正确”的答案时,我会通知您。
n8bar

16

我会说偏高。由于您可能会使用varchar,因此除非有人需要,否则您允许的任何额外空间实际上都不会用完。我要说的是名字(名字或姓氏)至少50个字符,电子邮件地址至少128个字符。那里有一些很长的电子邮件地址。

我想做的另一件事是去Lipsum.com并要求它生成一些文本。这样,您就可以很好地了解100字节的外观。


6
噢,我-第一个注意到较大字段并不一定意味着更多存储空间的人,因此是varchar中的“ var”。NVarchar通常对于名称更有意义。

取决于实现。如果VARCHAR支持UTF-8,则不需要NVARCHAR。
dan04 2010年

2
[N]Varchar但是大小影响您的索引。
RBarryYoung

11

除非有充分的理由,否则我几乎总是使用2的幂,例如面对客户的界面,其中其他一些数字对客户有特殊含义。

如果您坚持使用2的幂,那么它将使您处于一组有限的公共大小内,这本身是一件好事,并且使您更容易猜测可能遇到的未知对象的大小。我看到很多其他人都在这样做,并且在美学上令人愉悦。当我看到它时,通常会给我一种很好的感觉,这意味着设计师在想像工程师或数学家。虽然我可能会担心是否仅使用质数。:)


3
有争议的是,2ⁿ-1、2ⁿ-2或什至2ⁿ-4、2是更好的工程决策,因为通常将字符串表示为零索引字符,并以空字符,字节或两个字节终止(UTF-8 )。同样,在varchar上超过255的某些数据库中,需要额外的字节来存储(请参见stackoverflow.com/questions/2340639/…)。
Pocketsand,



2
+------------+---------------+---------------------------------+
|   Field    | Length (Char) |           Description           |
+------------+---------------+---------------------------------+
|firstname   | 35            |                                 |
|lastname    | 35            |                                 |
|email       | 255           |                                 |
|url         | 60+           | According to server and browser |
|city        | 45            |                                 |
|address     | 90            |                                 |
+------------+---------------+---------------------------------+

编辑:添加了一些间距


1
为什么不对所有字符串都使用VARCHAR 255?VARCHAR不使用填充,并以额外的一或两个字节结尾。
radtek '16

varchar可能会有点慢。
kta

1

仅查看我的电子邮件存档,就有许多相当长的“名字”(当然,“第一”的含义因文化而异)。一个例子是Krishnamurthy,它长13个字母。基于此,一个很好的猜测可能是20到25个字母。电子邮件应该是长,因为你可能有firstname.lastname@somedomain.com。另外,gmail和其他一些邮件程序允许您使用firstname.lastname+sometag@somedomain.com,其中“ sometag”是您要放在此处的任何内容,以便您可以使用它对传入的电子邮件进行排序。我经常遇到网络表单,这些表单不允许我输入完整的电子邮件地址而不考虑任何标签。因此,如果您需要一个固定的电子邮件字段,则可能是25.25+15@20.3个字符,总共90个字符(如果我的数学正确!)。


0

我通常会选择:

:30个字符
:30个字符
电子邮件:50个字符
地址:200个字符

如果我担心名称的长字段,有时我也可能会为名称字段加上50,因为这些天存储空间很少出现问题。


11
50个电子邮件?254实际上是最高
Marko 2012年

0

如果您需要考虑本地化(针对美国以外的地区!),并且有可能在您的环境中使用,我建议:

为名称的每个组成部分定义数据类型-注意:某些区域性具有两个以上的名称!然后输入全名,

这样本地化就变得简单了(就名称而言)。

同样适用于地址,顺便说一句-不同的格式!


-1

是varchar对吗?因此,不管您使用50还是25,最好是安全使用50,这表示我相信我所见到的最长的时间是19左右。姓氏更长

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.