【问题标题】:0 number has not been entered into the mysql database0号尚未输入mysql数据库
【发布时间】:2011-02-21 03:41:01
【问题描述】:

我编写了一个脚本,将数据从 csv 文件上传到 mysql 数据库中的列 pin_code。 pin_code 设置为 varchar 并且在插入数据库时​​,任何值之前的数字 0 都没有进入数据库。

例如 012345,输入为 12345。pin_code strlen 为 6 位。如果 strlen 为 5,是否有任何 mysql 语句可以更改此类列,在其前面添加 0?该数据库现已上线。感谢任何帮助。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    如果你想在 PHP 中使用前导零,你可以使用sprintf()

    $number = sprintf('%06d', $number);
    

    I blogged about this once :)

    【讨论】:

    • 据我所知,PHP 会将其直接转换回整数并去掉前导 0。您是否真的对此进行了测试,或者该博客文章只是一个想法?
    • @Endophage It works,但您必须将数字作为字符串。
    • @Endophage - 只有当字符串用于数字上下文时,0 才会被剥离,例如,$number = $number + 5;
    • 有趣。我遇到了一个令我非常沮丧的情况。当使用数字(键入为字符串)作为数组键时,它会自动转换为数字索引。但是,如果您对 memcached 使用数字索引,然后使用键数组查询缓存,则返回的数组将数字键作为字符串类型。它引起了各种各样的问题,因为我想做一个 array_diff_key 来获取一个非缓存项的数组,但是那个函数确实 === 所以类型检查失败了。
    • @Endophage 谢谢,something similar 以前发生在我身上。 :)
    【解决方案2】:

    另一个 MySQL 解决方案:对可变长度字符串使用 LPAD

    mysql> SELECT LPAD('123', 6, '0');
    +---------------------+
    | LPAD('123', 6, '0') |
    +---------------------+
    | 000123              |
    +---------------------+
    1 row in set (0.00 sec)
    
    
    mysql> select LPAD('12345', 6, '0');
    +-----------------------+
    | LPAD('12345', 6, '0') |
    +-----------------------+
    | 012345                |
    +-----------------------+
    1 row in set (0.00 sec)
    

    http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lpad

    【讨论】:

      【解决方案3】:

      类似

      UPDATE table_name SET pin_code=CONCAT('0',pin_code) WHERE LENGTH(pin_code)=5
      

      【讨论】:

      • 完美!谢谢。我实际上正在编写另一个 php 脚本来解决这个问题,但这对我很有用!
      • 如果密码只有 4 个字符怎么办?这不是一个特别通用的解决方案。
      • 这正是我们所要求的。
      • 仅供参考,我没有给你-1。虽然 OP 确实特别提到了 5 个字符的密码,但他可能根本没有任何只有 4 个字符的密码的案例。最好是解决问题,而不是贴上创可贴。
      • Endophage,我现在需要一个创可贴,因为网站已经上线,我必须尽快做出改变。
      【解决方案4】:

      当您将数字读入 PHP 时,您的 PHP 脚本很可能会去掉前面的 0。这是一种标准的(和皇家的)痛苦。至少据我所知,您实际上无法阻止 PHP 将仅包含数字的字符串解释为数字并去除不重要的数字。

      您建议检查strlen 并将其填充出来肯定是最快的解决方法。

      【讨论】:

        猜你喜欢
        • 2012-04-14
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多