我需要将邮政编码存储在数据库中。这个专栏应该有多大?

时间:2008-11-28 04:15:04

标签: database oracle globalization postal-code

我希望我的Oracle数据库中的列是VARCHAR2。

美国拉链是9。

加拿大人是7岁。

我认为32个字符是合理的上限

我错过了什么?

[编辑] TIL:12是这个问题的合理答案 感谢所有贡献的人。

8 个答案:

答案 0 :(得分:41)

浏览Wikipedia's Postal Codes page,32个字符应该绰绰有余。我会说甚至16个字符也不错。

答案 1 :(得分:19)

正如@ n​​eil-mcguigan已经提出的那样,维基百科在这个主题上有一个不错的页面。基于这12个字符应该这样做:http://en.wikipedia.org/wiki/List_of_postal_codes

维基百科的文章列出了约254个国家,UPU (Universal Postal Union)有192个成员国。

答案 2 :(得分:12)

为什么要声明字段大小大于您希望存储在其中的实际数据?

如果你的应用程序的初始版本支持美国和加拿大地址(我在你问题中调出这些大小的事实我推断),我会将该字段声明为VARCHAR2(9)(或VARCHAR2(10)如果您打算将连字符存储在ZIP + 4字段中)。即使查看其他国家对各国邮政编码的帖子,VARCHAR2(9)或VARCHAR2(10)对于大多数其他国家也是如此。

在线下,您可以随时更改列以在需要时增加长度。但是,由于某种原因(即因为他们想要运输标签上的另一条线),通常很难阻止某人在某处决定“创造性”并将50个字符填充到VARCHAR2(50)字段中。您还必须处理测试边界情况(每个显示ZIP句柄的应用程序将处理50个字符吗?)。而且,当客户端从数据库中检索数据时,它们通常根据将要获取的数据的最大大小而不是给定行的实际长度来分配内存。在这种特定情况下可能不是很大,但在某些情况下,每行40个字节可能是一块不错的RAM。

另外,您也可以考虑分别存储(至少对于美国地址)邮政编码和+4扩展名。能够按地理区域生成报告通常很有用,您可能经常希望将所有内容放在一起使用邮政编码,而不是通过+4扩展将其分解。此时,不必尝试SUBSTR输出邮政编码的前5个字符。

答案 3 :(得分:3)

您缺少的是您需要专门处理邮政编码的原因。

如果您不需要使用邮政编码工作,我建议您不要担心。通过工作,我的意思是进行特殊处理,而不仅仅是用来打印地址标签等。

只需创建VARCHAR2(50)的三个或四个地址字段[例如],让用户输入他们想要的任何内容。

您真的需要按邮政编码对您的订单或交易进行分组吗?我认为不是,因为不同国家的这一领域有着截然不同的方案。

答案 4 :(得分:3)

规范化?邮政编码可能会被多次使用,并可能与街道名称或城镇名称相关。单独的表格。

答案 5 :(得分:2)

加拿大邮政编码只有6个字符,以字母和数字的形式(LNL NLN)

答案 6 :(得分:2)

英国已发布标准:UK Government Data Standards Catalogue

Max 35 characters per line 

国际邮政地址:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

英国邮政编码长度为:

Minimum 6 and Maximum 8 characters 

答案 7 :(得分:1)

如果要将邮政编码集成到数据库中,则最好使用地理名称数据库。虽然它很难使用和理解,但它是像我们这样的用户可以自由使用的最大的地理数据库。

所有其他此类数据库或多或少都具有相同的数据和结构。他们只是从数据库中删除一些额外/冗余信息。如果您只是为低负载系统而使用它们的免费服务,那么限制很有吸引力,并且使用json和ajax提供更简单的界面。您可以查看限制here

对于您的信息,varchar(20)足以存储邮政编码