0

我正在设计一个存储 5 位美国邮政编码的表格,没有扩展名。看起来主要的竞争者是CHAR(5)MEDIUMINT (5) UNSIGNED ZEROFILL。参考:

我计划使用 CHAR(5) 的原因描述为使用整数列在数据库中存储美国邮政编码是个好主意吗?. 编辑-因此, usingZEROFILL不是答案,所以请不要让我使用ZEROFILL或关闭这个问题,而是参考以前的答案,上面写着 use ZEROFILL

接下来,我想确保始终存储 (5) 个字符,如果提供的字符较少,则查询会产生错误,或者用零填充(而不是用空格填充)。我的目的是防止邮政编码“3101”永远存在于数据库中,并确保它必须是“03101”。请注意,我不是在问如何让 PHP 应用程序在邮政编码左侧填充零。

4

3 回答 3

2

您可以使用 LPAD 函数将值左填充零。

LPAD (zip_code, 5, '0')
于 2013-09-26T13:43:50.710 回答
0

首先,如果您打算只保存数字,最好使用 SMALLINT 而不是 CHAR。INT 及其衍生物就是为此而设计的:-ti 将占用更少的空间-并且读/写会变得更胖(即使差异很小)

为了确保您始终有 5 个字符,您必须使用 ZEROFILL。你应该看看这个线程:MySQL 中的 zerofill 有什么好处?

于 2013-09-26T13:41:39.727 回答
0

如果您将 zerofill 属性添加到该字段并将长度设置为 5,它将向左填充零,如您提供的链接中所述。

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `test` int(5) unsigned zerofill DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

请务必在输入之前验证 zip。

有时邮政编码也有 4 位数字后缀。如果您希望您可能有一些这种格式的邮政编码,可能希望将其设为 char(10)。或 zip_suffix 列。

于 2013-09-26T13:39:39.550 回答