我需要在数据库中存储邮政编码。该列应该有多大?

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

美国邮政是9。

加拿大人7岁。

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

我错过了什么?

[编辑] TIL: 12是对这个问题的合理回答 感谢所有为此做出贡献的人。

99429 次浏览

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

浏览一下 维基百科的邮政编码页面,32个字符应该足够了。我认为即使是16个字符也是不错的。

你所忽略的是为什么你需要特别处理邮政编码的原因。

If you don't really need to 工作 with a postal code, I would suggest not worrying about it. By work, I mean do special processing for rather than just use to print address labels and so on.

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

你真的 需要组你的订单或交易按邮政编码?我不这么认为,因为不同的国家在这个领域有很大的不同。

正常化?邮政编码可能使用不止一次,并且可能与街道名称或城镇名称有关。单独的表格。

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

If the initial version of your application is going to support US and Canadian addresses (which I'm inferring from the fact that you call out those sizes in your question), I'd declare the field as VARCHAR2(9) (or VARCHAR2(10) if you intend to store the hyphen in ZIP+4 fields). Even looking at the posts others have made to postal codes across countries, VARCHAR2(9) or VARCHAR2(10) would be sufficient for the most if not all other countries.

一直以来,您总是可以更改列,以便在需要时增加列的长度。但是通常很难阻止某些人,在某些地方,由于某种原因(例如,因为他们想在发货标签上再加一行) ,决定“创造性地”将50个字符填入 VARCHAR2(50)字段。您还必须处理测试边界情况(是否每个显示 ZIP 的应用程序处理50个字符?).而且,当客户机从数据库中检索数据时,它们通常是根据将要获取的数据的最大大小来分配内存,而不是根据给定行的实际长度。在这个特定的情况下,可能不是什么大问题,但是在某些情况下,每行40字节可能是一个相当不错的 RAM 块。

另外,您还可以考虑分别存储(至少对于 US 地址)邮政编码和 + 4扩展名。一般来说,通过地理地区生成报告是很有用的,你可能经常想把所有的邮政编码放在一起,而不是通过 + 4扩展来分解。此时,不必尝试 SUBSTR 输出邮政编码的前5个字符是很有用的。

如果要在数据库中集成邮政编码,那么最好使用地名数据库。虽然它很难使用和理解,但它是最大的地理数据库免费提供给像我们这样的用户。

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

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

正如@neil-mcguigan 已经提到的,维基百科在这个话题上有一个不错的页面。基于这12个字符应该做到这一点: http://en.wikipedia.org/wiki/List_of_postal_codes

这篇维基百科文章列出了254个国家,对于 万国邮联(万国邮政联盟)有192个成员国来说这是相当不错的。

英国已公布标准: 英国政府数据标准目录

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