PostgreSQL数据库中ZipCode的列类型?

时间:2011-03-24 14:46:47

标签: postgresql zipcode sqldatatypes

ZipCode数据库中保存PostgreSQL值的正确列类型是什么?

3 个答案:

答案 0 :(得分:15)

我非常不同意这里提出的建议。

  1. 接受的答案接受不是数字的内容。
  2. 问题是关于邮政编码,而不是邮政编码。
  3. 如果我们认为该帖子错误并且意味着国际邮政编码,那么国际邮政编码中出现的字符不会出现在该列表中,许多国际邮政编码也可能超过十个字符
  4. 如果我们实际回答了他们提出的问题,关于 邮政编码 ,那么除了数字(可以说是连字符)之外,不应该有任何住宿
  5. 美国邮政编码最长可达11位数(13个字符统计两个短划线) - 有一个拉链,一个拉链+4,一个拉链+6(程序员会称之为zip + 4 + 2)表示法;最后一个被摩天大楼,大学等等使用
  6. 美国邮政编码总是非负整数,因此不应存储为文本数据,这会受到非正典表示问题的影响(询问那些完成系统的人,他们发现他们的邮政编码是00203没有与经常不必要地解析字符串表示时偶然得到的zip 203相匹配)
  7. 如果您假装实际上正在跟踪国际邮政编码,则此处的短字符序列限制文本字段甚至不会开始执行此任务。想到“中国”这个词。
  8. 我的观点:

    1. 决定您是否实际处理美国邮政编码或国际
    2. 如果您正在处理美国邮政编码, 会将其作为无符号整数跟踪 ,并在文字代表它们时用零填充它们。 (如果您需要了解为什么从长远来看这会更简单,请考虑unix时间戳和本地TZ表示。)
    3. 如果您正在处理国际邮政编码,请将它们存储在无限制的unicode字符串中,将它们绑定到它们所代表的国家/地区,并按国家/地区的检查限制进行验证。这个问题远比前面的声音困难得多。国际地址是地球上最不标准化的东西。等等,你会发现日本房屋号码是如何运作的,或者为什么英国邮政6码有它的差距。

答案 1 :(得分:7)

类似于xxxxx-xxxx,因此建议使用varchar(10)

如果要检查数据库中值的语法,可以为邮政编码创建domain类型。

CREATE DOMAIN zipcode varchar(10) 
    CONSTRAINT valid_zipcode 
    CHECK (VALUE ~ '[A-Z0-9-]+'); -- or a better regular expression

您可以查看this网站,该网站建议使用此正则表达式:

(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$)

但是你应该检查它是否适用于PostgreSQL正则表达式语法。

答案 2 :(得分:0)

这取决于你想要的拉链类型。如果你确定你只需要存储标准的5位数字,那么使用int将是最节省空间的。

但是如果你需要进行5 + 4扩展,那么10位数字符字段最好。我个人建议,如果你最终需要存储国际邮政编码,它确实会使它变得更容易10位数几乎涵盖我遇到的每种可能的邮政编码格式。