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

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

美国的拉链是9。

加拿大人是7。

我想32个字符是合理的上限

我错过了什么?

[编辑] TIL:12是一个合理的答案,谢谢大家的贡献。

浏览维基百科的邮政编码页面 ,32个字符应该绰绰有余。 我会说甚至16个字符是好的。

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

维基百科的文章列出了254个国家,对于万国邮联(万国邮政联盟)有192个成员国。

为什么你会声明一个比你想存储的实际数据大的字段?

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

在这条线上,你可以随时改变列的长度,以增加需要的长度。 但是,通常很难阻止某个人从某个地方决定获得“创造性”,并出于某种原因(例如,因为他们希望在发货标签上另有一行)而将50个字符填充到VARCHAR2(50)字段中。 你还必须处理testing边界情况(每个应用程序显示一个ZIP句柄50个字符?)。 而事实上,当客户端从数据库中检索数据时,他们通常是基于将被获取的数据的最大大小来分配内存,而不是给定行的实际长度。 在这种情况下可能不是一个大问题,但是在某些情况下,每行40个字节可能是相当不错的一块RAM。

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

你所缺less的是你需要特别处理邮政编码的一个原因。

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

只需创buildVARCHAR2(50)的三个或四个地址字段(例如),并让用户input任何他们想要的。

你真的需要通过邮编分组你的订单或交易吗? 我认为不是,因为不同的国家在这个领域有着截然不同的计划。

正常化? 邮政编码可能会多次使用,可能与街道名称或城镇名称有关。 单独的桌子。

加拿大邮政编码只有6个字母,以字母和数字(LNLNLN)

如果你想在数据库中整合邮政编码,那么最好使用geonames数据库。 尽pipe使用和理解起来非常困难,但它却是像我们这样的用户可以免费获得的最大的地理数据库。

所有其他这样的数据库或多或less具有相同的数据和结构。 他们只是从数据库中删除一些额外/冗余的信息。 如果你只是做低负载系统使用他们的免费服务的限制是有吸引力的,并提供更容易使用json和ajax接口。 你可以在这里查看限制

为了您的信息varchar(20)足以存储邮政编码

正常化? 邮政编码可能会多次使用,可能与街道名称或城镇名称有关。 单独的桌子。

诚然,但是请尝试维护一个全世界邮政编码 – 街道 – 城镇名称和关系的数据集。 除非这是企业的核心业务,否则我不build议这样做。

英国已经发布了标准: 英国政府数据标准目录

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