【问题标题】:MySQL Int Removes 0MySQL Int 删除 0
【发布时间】:2009-08-30 13:01:57
【问题描述】:

您好,我的数据库中有一个列设置为 Int。

但是我的数据总是以 0 开头,所以每当我添加新记录时,它都会去掉 0,我不希望它这样做,以防第一个字符在某些时候必须是 1。

我该如何克服这个问题?

使用 VARCHAR 的最佳方法是使用 PHP 进行验证吗?

更新

如果我输入 02118272,它将作为 2118272 保存到数据库中。

【问题讨论】:

  • 您能否举一个您的数据示例:它现在是什么样子以及您希望它是什么样子?
  • 这是一个演示问题,不是数据问题。您想“展示”您的号码 02118272,但该号码仍然是 2118272。您需要在用户界面中解决此问题。

标签: php mysql integer


【解决方案1】:

整数7 与整数000000000000000000000000007 是一回事。他们都是……你知道……七。当存储在数据库中时,它实际上存储为 000000000000000000000000007 之类的东西,但大多数 MySQL 客户端不会费心显示所有这些零。

如果在您的应用程序中使用一定数量的数字显示这些数字很重要,您可以使用 str_pad() 函数添加任意数量的前导零:

str_pad($your_string, 10, '0', STR_PAD_LEFT);

这里,10 是您希望字符串的长度,'0' 是将添加的字符以使其达到该长度,STR_PAD_LEFT 表示将字符添加到左侧字符串的一侧。

另一方面,如果数字'007' 与数字'7' 根本不同,那么您将不得不使用VARCHAR() 字段来存储它。这些不再是整数;它们是含义非常不同的字符串。

【讨论】:

  • 它甚至没有作为十进制数存储在数据库中,因此声称它在数据库中具有前导零是错误的。话虽如此,这个答案的其余部分是处理问题的正确方法。
  • 当然它在数据库中有前导零。数字 7 将存储为 00000000000000000000000000000111:具有 29 个前导零的 32 位整数。当然,它们不是十进制零,但概念完全相同。
【解决方案2】:

您应该在数据库中存储的是数据。该数据的格式化是应用程序的责任,而不是数据库本身。

我会将它存储为一个整数,如果您需要将其保存到小数点后 7 位并带有前导零,那么执行此操作的正确位置是在将数据提取到您的应用程序之后。

【讨论】:

    【解决方案3】:

    我认为您应该为该字段使用 varchar 类型。如果你想在 php 中将变量转换为整数,你可以简单地这样做:

    $var=preg_replace("/[^\d]/","",$var);
    

    这样你就可以删除所有不是数字的字符,然后你可以把这个值放到数据库中,保留初始的 0。

    【讨论】:

    • -1 仅当格式可能区分两个值时,存储数字的格式才是一个好主意。例如 01 与 1 不同。
    • 使用 intval() 更简单
    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 2021-03-18
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2015-03-20
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多