【问题标题】:leading zeros in mysql zerofill int field not showing when queried查询时不显示mysql zerofill int字段中的前导零
【发布时间】:2011-04-12 07:41:48
【问题描述】:

我有一张带有自动递增填零 ID 号的表格。当我查询数据时,ID 丢失了前导零(即“000529”返回为“529”)。有没有办法保留前导零,甚至在查询语句中生成它们?我知道我可以使用 STRPAD 在 PHP 中生成它们,但是对于我正在进行的特定项目,我想检索数据库中的数据。

【问题讨论】:

  • 可能是 PHP 将这些 ID 转换为整数。
  • 它们被保留在这里,所以你需要提供更多关于你如何连接、查询和可能的转换的信息(确保你得到的是字符串,而不是整数)。 mysql & PDO 将在此处“开箱即用”快速测试中保留它们。
  • SELECT id, name title, 'profile' type, date FROM intake WHERE name LIKE '%mi%' UNION ALL SELECT id, casename, 'matter' type, date_opened date FROM s_matters WHERE casename LIKE ' %mi%' UNION ALL SELECT cid AS id, name title, 'call' type, date FROM s_calls WHERE name LIKE '%mi%' UNION ALL SELECT id, subject title, 'event' type, start_date date FROM s_events WHERE subject LIKE '%mi%' ORDER BY date DESC LIMIT 20
  • id 字段和 cid 字段是 6-8 位,前导零,但是当从该查询返回结果时,任何 id 中都没有前导零
  • 您使用的是哪个 MySQL 库? mysql_*()、mysqli_*() 还是 PDO 类?

标签: mysql zerofill


【解决方案1】:

当您选择带有前导零的字段并使用 UNION 时,它将删除前导零。
我通过添加找到了解决方法:

CONVERT(id_number,char) as id_number

显然,id_number 代表您尝试选择的任何零填充字段。

【讨论】:

    【解决方案2】:

    是 UNION ALL 部分将它们转换为 INT - 我还没有找到一个简单的解决方案。在我看来,这是一个 mySql 错误。

    【讨论】:

      【解决方案3】:

      使用函数 LPAD() 显示用零填充的数字(左):

      SELECT LPAD( 529, 6, '0') AS padded;
      

      【讨论】:

      • 或者试试:SELECT CONVERT(field, CHAR)
      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2014-10-23
      相关资源
      最近更新 更多