我需要将邮政编码存储在数据库中。列应该多大?
-
11-07-2019 - |
题
我希望我的Oracle数据库中的列为VARCHAR2。
美国邮政编码为9。
加拿大人7岁。
我认为32个字符是合理的上限
我想念什么?
[编辑] TIL:12是对该问题的合理答案 感谢所有贡献者。
解决方案
跳过维基百科的邮政编码页面,应该足够32个字符。我会说甚至16个字符也是不错的。
其他提示
正如@ neil-mcguigan所提出的那样,维基百科在该主题上有不错的页面。基于这12个字符,应该这样做: http://en.wikipedia.org/wiki/List_of_postal_codes
维基百科文章列出了约254个国家/地区,对于 UPU(通用邮政联盟)有192个成员国。
为什么您要声明的字段大小大于期望存储在其中的实际数据?
如果您的应用程序的初始版本将支持美国和加拿大地址(我从您在问题中标注出这些大小的事实推断出这一点),我会将该字段声明为VARCHAR2(9)(或VARCHAR2(10)(如果您打算将连字符存储在ZIP + 4字段中)。即使查看其他国家/地区对邮政编码的帖子,VARCHAR2(9)或VARCHAR2(10)对于大多数其他国家也足够了。
在这行中,您随时可以更改列以增加长度(如果需要)。但是,通常很难阻止某人某个或某个地方出于某种原因(即因为他们想要在运输标签上加另一行)而决定“创造”并将50个字符填充到VARCHAR2(50)字段中。您还必须处理边界情况的测试(每个显示ZIP的应用程序都会处理50个字符吗?)。而且,当客户端从数据库中检索数据时,它们通常会根据将要获取的数据的最大大小而不是给定行的实际长度来分配内存。在这种特定情况下,可能不是什么大问题,但在某些情况下,每行40字节可能是不错的RAM。
顺便说一句,您还可以考虑(至少针对美国地址)分别存储邮政编码和+4扩展名。能够按地理区域生成报告通常很有用,并且您可能经常希望将所有内容都放在一个邮政编码中,而不是按+4扩展名进行分解。在这一点上,不必尝试将邮政编码的前5个字符替换掉是很有用的。
您所缺少的是为什么需要对邮政编码进行特殊处理的原因。
如果您真的不需要邮政编码的工作,我建议不要担心。通过工作,我的意思是要进行特殊处理,而不仅仅是打印地址标签等。
例如,只需创建三个或四个VARCHAR2(50)的地址字段,然后让用户输入所需的内容即可。
您真的需要按邮政编码对订单或交易进行分组吗?我认为不是,因为不同的国家在该领域有不同的计划。
规范化?邮政编码可能多次使用,并且可能与街道名称或城镇名称有关。单独的表格。
加拿大邮政编码只有6个字符,采用字母和数字(LNLNLNX)的形式
如果要将邮政编码集成到数据库中,则最好使用地理名称数据库。尽管很难使用和理解,但是它是像我们这样的用户免费使用的最大的地理数据库。
所有其他此类数据库或多或少都具有相同的数据和结构。他们只是从数据库中删除一些多余/多余的信息。如果您仅针对低负载系统使用免费服务,那么这些限制很有吸引力,并且使用json和ajax提供了更简单的界面。您可以在此处 查看限制
对于您的信息,varchar(20)足以存储邮政编码