我正在设计一个存储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。
答案 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?