【发布时间】:2013-03-28 10:40:17
【问题描述】:
我想在 MySQL 数据库中存储 邮政编码(美国境内)。 节省空间是当务之急。这是使用 VARCHAR 的更好选择 - 最大长度限制为 6 位或使用 INT 或使用 MEDIUM Int 。邮政编码不会用于任何计算。邮政编码将用于插入(一次)、更新(如果需要)和检索 - 一次(但可以多次)。
VARCHAR 或 INT 或 MEDIUM IN MYSQL 在这里使用哪个更好?请提出其他建议?
【问题讨论】:
我想在 MySQL 数据库中存储 邮政编码(美国境内)。 节省空间是当务之急。这是使用 VARCHAR 的更好选择 - 最大长度限制为 6 位或使用 INT 或使用 MEDIUM Int 。邮政编码不会用于任何计算。邮政编码将用于插入(一次)、更新(如果需要)和检索 - 一次(但可以多次)。
VARCHAR 或 INT 或 MEDIUM IN MYSQL 在这里使用哪个更好?请提出其他建议?
【问题讨论】:
将邮政编码存储为数值存在一些问题。
12345-6789。您不能将破折号存储在数值数据类型中。我会将邮政编码存储为varchar(5) 或varchar(10)。
顺便说一句,我不确定您为什么会选择 varchar(6),当标准邮政编码为 5 或 10 时,您是否有理由选择不寻常的长度?
【讨论】:
我通常使用MEDIUMINT(5) ZEROFILL 作为 5 位邮政编码。这将保留任何前导 0s 并且它只使用 3 个字节,而 VARCHAR(5) 将使用 6 个字节。这假设您不需要扩展的邮政编码,它有一个破折号和 4 个额外的数字。如果您决定使用文本类型,我会使用 CHAR(5) 而不是 VARCHAR(5),因为数据总是 5 个字符长会更好。
【讨论】:
邮政编码总是 5 个字符,因此您需要 CHAR 数据类型,而不是 VARCHAR。
因此您的选择是
CHAR(5)
MEDIUMINT (5) UNSIGNED ZEROFILL
第一个占每个邮政编码 5 个字节。
第二个每个邮政编码只占用 3 个字节。 ZEROFILL 选项对于带有前导零的邮政编码是必需的。
因此,如果您优先考虑空间,请使用 MEDIUMINT。
【讨论】:
我建议使用 VARCHAR 数据类型,因为在某些国家/地区,邮政编码用作字母数字,而在其他地方用作整数。所以我们不能将整数用于全局使用。此外,邮政编码可能以零开头,例如001101,因此在这种情况下,如果我们采用整数数据类型,那么前导零将丢失,因此我们无法传递实际的邮政编码。
【讨论】: