python如何转换mysql二进制(16)

How does python converts mysql binary(16)

我有两个应用程序,一个用 php 编写,一个用 python 编写,它们都使用同样的 mysql 数据库。

对于某些表中的条目的 public id,我使用 binary(16) 字段(我不能更改它,它必须保持这个方式)。

问题是python这个二进制字段是如何转换的?

我们以其中一个条目为例。

当我在 php(从数据库)中获取它时,public id 的值是 °•WiCÄ'õ0Iò|–g, SequelPro 中显示了相同的值。但是 php myAdmin 对二进制字段执行十六进制函数并显示 0bb09557691443c491f53049f27c9667。现在我设法在 php 中将二进制文件转换为 php myAdmin 中显示的值,它适用于所有条目,但我刚刚注意到 python 进行了另一次转换。当我通过 python 获得此示例中使用的条目时,public id 是 owwwweye1rjnvt3i1d0ib18x3

我需要实现的是在 php 中转换我从 MySql 获得的内容:°•WiCÄ'õ0Iò|–g 到 python看到:owwwweye1rjnvt3i1d0ib18x3。 php 应用程序调用 python 应用程序(不是我开发的),因此 id 需要采用相同的格式才能成功调用。

欢迎提出任何建议。谢谢

编辑:如果我发送 °•WiCÄ'õ0Iò|–g 从 php 到 python 并立即打印我得到: °â€¢WiCÄâ€∼õ0I²|-g

我终于解决了这个问题。

似乎 python 转换为 base36 而不是我错误假设的十六进制。

我尝试简单地 base_convert 0bb09557691443c491f53049f27c9667 从 16 到 36,但我有 owwwweye1rk04k4cskkw4s08s。不是我真正需要的,但仍然是一个很大的进步,因为它开始看起来像 owwwweye1rjnvt3i1d0ib18x3.

由于要转换的值很大(精度损失),我应该会出现这种差异,因此我进一步研究并找到了波纹管函数,由 Clifford dot ct at gmail dot 编写php.net 网站上的 com

<?php 

function str_baseconvert($str, $frombase=10, $tobase=36) { 
    $str = trim($str); 
    if (intval($frombase) != 10) { 
        $len = strlen($str); 
        $q = 0; 
        for ($i=0; $i<$len; $i++) { 
            $r = base_convert($str[$i], $frombase, 10); 
            $q = bcadd(bcmul($q, $frombase), $r); 
        } 
    } 
    else $q = $str; 

    if (intval($tobase) != 10) { 
        $s = ''; 
        while (bccomp($q, '0', 0) > 0) { 
            $r = intval(bcmod($q, $tobase)); 
            $s = base_convert($r, 10, $tobase) . $s; 
            $q = bcdiv($q, $tobase, 0); 
        } 
    } 
    else $s = $q; 

    return $s; 
} 

?> 

我认为其他人不会经常遇到这个问题,但如果发生了,希望他们能找到这个问题,而不是像我一样绞尽脑汁:))))