【问题标题】:PHP MySQL Convert to SMALLINTPHP MySQL 转换为 SMALLINT
【发布时间】:2014-05-22 13:48:36
【问题描述】:

如果这个问题已经得到解答,我深表歉意,我使用搜索功能找不到与此完全匹配的问题。

我正在尝试通过 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);

【问题讨论】:

标签: php mysql sql


【解决方案1】:

删除前导零并不是因为integersignedsmall。这与它是一个integer 的事实有关。如果要保留前导零,则需要转换为使用VARCHAR,否则在获取邮政编码时必须使用lpad()

在我看来,请选择VARCHAR

编辑:请阅读 Leonardo Phinheiro 的答案以获取替代方案!正如他所说,您可以将整数设置为ZEROFILL。虽然我仍然会使用VARCHAR 来表示邮政编码之类的东西。在荷兰,我们的邮政编码中甚至还有字母。

【讨论】:

  • 好吧,这是有道理的,我的同事要求 SMALLINT 但是我将解释多个澳大利亚邮政编码以 0 开头。那么我将如何在我的查询中实现它呢?
  • @user3577618 您希望实施哪种解决方案? smallint with lpad() , Smallint with zerofillvarchar ?
  • smallint 和 lpad() 在我看来是最可行的选择。因此,例如,如果您将其填充为 4 的长度,并且用户输入 0023。它将从 23 转换为 0023?
  • @user3577618 好的,为了实现,当您执行select 语句时,请像这样:select lpad(postcode,4,'0') from myTable。我的建议是使用VARCHAR,或者使用ZEROFILL,这样您就不必调整查询了。
  • 我应该把选择语句放在哪里?我从注册表中选择所有内容并插入数据库(它托管在服务器上),所以选择语句是“SELECT * FROM user”;我不想修改实际的邮政编码数据库字段本身,只是修改用户输入的邮政编码变量的存储方式,lpad函数会将其存储为SMALLINT吗?
【解决方案2】:

将数据类型更改为 unsigned-zerofill 无论您使用什么,float、int、smallint...仅将字段编辑为 unsigned-zerofill

【讨论】:

  • 好发现!以前没用过这个
【解决方案3】:

如果您想保留前导零,您应该考虑将邮政编码类型更改为varchar。 执行以下 SQL:

ALTER TABLE user MODIFY postcode VARCHAR(8);

【讨论】:

    【解决方案4】:

    据我所知,您不能在 MySQL 中存储带有前导零的整数。但是,您可以同时使用 MySQL 和 PHP 来每次生成前导零。

    在 MySQL 中检查 LPAD()http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_lpad

    str_pad() 在 PHP 中: http://il1.php.net/manual/en/function.str-pad.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多