强制MySQL CHAR()列要求所有数字或自动左键填充零

时间:2013-09-26 13:27:24

标签: php mysql sql zipcode

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

由于Is it a good idea to use an integer column for storing US ZIP codes in a database?描述的原因,我计划使用CHAR(5)。 编辑 - 因此,使用ZEROFILL不是答案,因此请不要让我使用ZEROFILL或关闭此问题,并参考之前的答案,其中说明使用{{1} }。

接下来,我想确保始终存储(5)字符,如果提供的字符较少,则查询产生错误,或者用零填充(并且不用空格填充)。我的意图是防止邮政编码" 3101"从数据库中存在,并确保它必须是" 03101"。请注意,我询问如何将一个PHP应用程序左键填充为带有零的zipcode。

3 个答案:

答案 0 :(得分:2)

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

LPAD (zip_code, 5, '0')

答案 1 :(得分:0)

如果您将zerofill属性添加到字段并将lenth设置为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;

请务必在输入之前验证拉链。

有时,zipcodes也有4位数的后缀。如果你希望你可能有这种格式的拉链码,可能想把它变成char(10)。或者是zip_suffix列。

答案 2 :(得分:0)

首先,如果您打算仅保存数字,最好使用SMALLINT而不是CHAR。 INT及其衍生产品是为此而制造的: - ti将占用更少的空间 - 读取/写入会变得更胖(即使差异很小)

为了确保你总是有5个字符,你必须使用ZEROFILL。你应该看一下这个帖子:What is the benefit of zerofill in MySQL?