我希望在我的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扩展将其分解.此时,不必尝试SUBSTR输出邮政编码的前5个字符是有用的.