【问题标题】:MYSQL unhex() in sqlfiddle.com is not equivalent to PHP hex2bin(), both give different resultssqlfiddle.com 中的 MYSQL unhex() 不等同于 PHP hex2bin(),两者给出不同的结果
【发布时间】:2016-03-27 09:17:23
【问题描述】:

我正在尝试使用 PHP 而不是 MYSQL 在数据库中添加键值

select unhex(md5('google.com')) from x;

输出

HVkg9LRLJ6gCvXfE8FNvWg==

然而使用 PHP

echo hex2bin((md5("google.com")));

输出

Y ��K'��w��SoZ

我不确定这里出了什么问题,有什么帮助吗?

编辑1 约阿希姆·伊萨克森

【问题讨论】:

    标签: php mysql sqlfiddle


    【解决方案1】:

    我不确定您是如何获得该值的,但是在 MySQL 提示符下进行选择会得到与 PHP 中相同的值;

    mysql> select unhex(md5('google.com'));
    +--------------------------+
    | unhex(md5('google.com')) |
    +--------------------------+
    | Y �K'��w��SoZ         |
    +--------------------------+
    1 row in set (0.00 sec)
    

    你显示的是同一事物的 base64 编码值;

    mysql> select to_base64(unhex(md5('google.com')));
    +-------------------------------------+
    | to_base64(unhex(md5('google.com'))) |
    +-------------------------------------+
    | HVkg9LRLJ6gCvXfE8FNvWg==            |
    +-------------------------------------+
    1 row in set (0.00 sec)
    

    我不确定您的值如何进行 base64 编码,但它似乎与您显示的 MySQL 查询无关。这可能是由您在 PHP 中获取值的方式引起的。

    【讨论】:

    • @HassanAmir SQLFiddle base64 对二进制值进行 base64 编码,以便能够以可用的形式将它们输出为文本,但这并不意味着如果您直接查询 MySQL 就会这样做。输出是严格特定于 SQLfiddle 的。
    • @HassanAmir This fiddle 显示了这种效果,无论您是否使用 base64 编码,SQLfiddle 都会显示完全相同的值。
    • 我试图在二进制(16)mysql 列中插入数据,如果我从 mysql 命令行使用 unhex 插入数据,它确实可以工作,但不能使用 PHP 从 hex2bin 工作
    • @HassanAmir 你能添加实际的插入代码吗?很难回答不属于问题的内容:)
    • 已将答案标记为正确,一旦我准备好,我将在下面发布 php 代码。
    猜你喜欢
    • 2013-07-06
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多