2013-04-05 65 views
6

我想在MySQL数据库中存储邮政编码(在美国境内)。 保存空间是重中之重。这是使用VARCHAR的更好选择 - 限制为最大长度为6位或使用INT或使用MEDIUM Int。邮政编码不会用于任何计算。邮政编码将用于插入(一次),更新(如果需要)和检索 - 一次(但可以多次)。什么是美国邮政编码的最佳列类型?

哪个更适合在这里使用VARCHAR或INT或MEDIUM IN MYSQL?请提出其他建议吗?

+0

可能重复[在数据库中使用整数列来存储美国邮政编码是个好主意吗?](http://stackoverflow.com/questions/893454/is-it-a-good-idea-使用的安整数列换存储-US-拉链码-IN-A-databas) – Taryn 2013-04-05 21:25:23

回答

12

将邮政编码作为数字值存储时存在一些问题。

  1. 邮政编码有扩展名,这意味着它们可以是12345-6789。您不能在数字数据类型中存储短划线。
  2. 有很多以零开头的邮政编码,如果您将它作为int存储,您将失去前导零。
  3. 你不加/减等邮政编码或使用数字功能。

我会存储一个邮政编码为varchar(5)varchar(10)

作为便笺,我不确定为什么你会选择varchar(6),当标准邮政编码为5或10时,您是否有理由选择不寻常的长度?

4

我通常使用MEDIUMINT(5) ZEROFILL代替5位数的邮政编码。这保留了任何领先的0 s,并且它只使用3个字节,其中VARCHAR(5)将使用6。这假定您不需要扩展邮政编码,其具有短划线和4个额外数字。如果您决定使用文本类型,我会使用CHAR(5)而不是VARCHAR(5),因为如果数据总是5个字符长,则更好。

3

邮政编码总是5个字符,因此您需要一个CHAR数据类型,而不是VARCHAR。

选项有因此

CHAR(5) 

MEDIUMINT (5) UNSIGNED ZEROFILL 

第一取每邮政编码5个字节。

第二个每个邮政编码只需要3个字节。 ZEROFILL选项对于带有前导零的邮政编码是必需的。

因此,如果空间是您的首选,请使用MEDIUMINT。

1

我会建议,使用VARCHAR数据类型,因为在一些国家,邮政编码用作字母数字和其他地方作为整数。所以我们不能使用整数用于全局使用。此外,邮政编码可能从零开始,如001101,所以在这种情况下,如果我们采用数据类型整数,则导致零将丢失,因此我们无法传递实际的邮政编码。

相关问题