如何将无符号的32位整数转换为MySQL或PHP中的签名?

Ale*_*lex 8 php mysql unsigned signed casting

我在PHP中有一个字符串(来自某些数据源),它表示格式化的无符号32位整数.我需要将它作为带符号的 32位整数存储到MySQL数据库中,以便稍后我可以从PHP检索它并将其用作(可能为负)有符号整数常量(因为PHP没有无符号整数).

所以,我需要的是一种转换方法,无论是PHP还是MySQL.它不应该依赖于平台(没有endian/32/64位问题).

我知道如何使用MySQL将有符号整数转换为无符号整数:

select CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER);
+------------------------------------------------------+
| CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER) |
+------------------------------------------------------+
|                                           3232240316 | 
+------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

但是我不能反过来工作(注意:MySQL在进行强制转换时使用64位算术).

谢谢.

Ale*_*lex 0

这:

$val = (bccomp("2147483647", $val) < 0) ? bcsub($val, "4294967296") : $val;
Run Code Online (Sandbox Code Playgroud)

似乎有效,尽管有点慢。