15

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

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

4

4 回答 4

32

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

  1. 邮政编码有扩展名,这意味着它们可以是12345-6789. 您不能将破折号存储在数值数据类型中。
  2. 有许多以零开头的邮政编码,如果将其存储为 int,您将失去前导零。
  3. 您不要添加/减去等邮政编码或使用数字函数。

我会将邮政编码存储为varchar(5)or varchar(10)

作为旁注,我不确定您为什么会选择varchar(6),当标准邮政编码为 5 或 10 并带有扩展名时,您是否有理由选择不寻常的长度?

于 2013-04-05T21:22:05.087 回答
8

我通常使用MEDIUMINT(5) ZEROFILL5 位数的邮政编码。这将保留任何前导0s 并且它只使用 3 个字节,而 aVARCHAR(5)将使用 6。这假设您不需要扩展的邮政编码,它有一个破折号和 4 个额外的数字。如果您决定使用文本类型,我会使用CHAR(5)而不是,VARCHAR(5)因为如果数据总是 5 个字符长会更好。

于 2013-04-05T21:24:29.613 回答
4

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

因此,您的选择是

CHAR(5)

MEDIUMINT (5) UNSIGNED ZEROFILL

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

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

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

于 2013-04-05T21:26:53.313 回答
1

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

于 2017-11-17T20:01:42.190 回答