我很抱歉,如果已经回答了这个问题,我使用了搜索功能,找不到与此完全匹配的问题。
我试图通过mysql_query将邮政编码字段(澳大利亚)插入我的数据库,我已经确认一切正常,但有效的邮政编码可能是,例如0021或0214。
问题是,当插入数据库时它会自动丢弃前导零,这显然有问题,如果内存为我服务,这可能是因为整数是无符号的?
我需要的值是SMALLINT类型,并保留前导零,我知道mySQL有一个CONVERT函数,但是我从来没有让它工作。
这是我当前的插入查询:
$insertquery = "INSERT IGNORE INTO user (username, password, firstname, surname, address, state, postcode)
VALUES ('$username', '$password', '$fname', '$surname', '$address', '$state', '$postcode')";
$insertresult = mysql_query($insertquery);
答案 0 :(得分:1)
删除前导零不是因为integer
为signed
或small
。它与integer
全部在一起这一事实有关。如果您想保留前导零,则需要转换为使用VARCHAR
,否则在获取邮政编码时必须使用lpad()
。
在我看来,只需使用VARCHAR
。
编辑:请阅读Leonardo Phinheiro的替代方案的答案!正如他所说,您可以将整数设置为ZEROFILL
。虽然我仍然会使用VARCHAR
来代替邮政编码。在荷兰,我们的邮政编码中都有字母。
答案 1 :(得分:1)
将数据类型更改为 unsigned-zerofill 无论您使用什么,float,int,smallint ...仅将字段编辑为 unsigned-zerofill
答案 2 :(得分:0)
如果您想保留前导零,则应考虑将邮政编码的类型更改为varchar
。
执行以下SQL:
ALTER TABLE user MODIFY postcode VARCHAR(8);
答案 3 :(得分:0)
据我所知,你不能在MySQL中存储一个前导零的整数。但是,您可以同时使用MySQL和PHP生成前导零。
检查MySQL中的LPAD()
:
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_lpad
PHP中的str_pad()
:
http://il1.php.net/manual/en/function.str-pad.php