【问题标题】:What is the best column type for a United States ZIP code?美国邮政编码的最佳列类型是什么?
【发布时间】:2013-03-28 10:40:17
【问题描述】:

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

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

【问题讨论】:

标签: mysql int varchar


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      因此您的选择是

      CHAR(5)
      
      MEDIUMINT (5) UNSIGNED ZEROFILL
      

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

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

      因此,如果您优先考虑空间,请使用 MEDIUMINT。

      【讨论】:

      • 美国邮政编码可以包含 9 位数字和一个连字符,而不仅仅是 5 位数字。如果您假设邮政编码的长度,那么您必须准备在将来邮政编码发生变化时更改列类型。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2010-12-02
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多