美国邮政编码的最佳列类型是什么?

Tap*_*ker 9 mysql int varchar

我想在MySQL数据库中存储邮政编码(美国境内).节省空间是一个优先事项.这是使用VARCHAR的更好选项 - 限制为最大长度为6位或使用INT或使用MEDIUM Int.邮政编码不会用于任何计算.Zip代码将用于插入(一次),更新(如果需要)和检索 - 一次(但它可以不止一次).

哪个更好的选择在MYSQL中使用VARCHAR或INT或MEDIUM?请另外建议吗?

Tar*_*ryn 20

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

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

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

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


G-N*_*get 6

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


fis*_*est 6

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

因此,您的选择是

CHAR(5)

MEDIUMINT (5) UNSIGNED ZEROFILL
Run Code Online (Sandbox Code Playgroud)

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

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

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