PHP与MSSQL字符串转HEX结果不一致问题求助
解决PHP bin2hex与MSSQL CAST(varbinary)结果不一致的问题
我来帮你搞定这个编码匹配的难题!问题的核心在于字符编码的差异:PHP默认用UTF-8处理字符串,而你的MSSQL实例在执行CAST('đžćčšđđ' as varbinary)时,使用的是Windows-1250编码(Windows系统下常用的中欧字符集,和ISO-8859-2有部分字符映射差异)。
错误原因分析
你之前尝试的ISO-8859-2和Windows-1250虽然都是中欧编码,但以下两个字符的字节值不同:
ž:ISO-8859-2是0xBE,Windows-1250是0x9Eš:ISO-8859-2是0xB9,Windows-1250是0x9A
这就是为什么你得到的结果有两个字符不匹配。
正确解决方案
只需将字符串转换为Windows-1250编码后再生成十六进制即可,代码如下:
$originalStr = 'đžćčšđđ'; // 将UTF-8字符串转换为Windows-1250编码 $win1250Str = mb_convert_encoding($originalStr, 'Windows-1250', 'UTF-8'); // 生成对应十六进制 $hexResult = bin2hex($win1250Str); echo $hexResult; // 输出:F09EE6E89AF0F0
或者用unpack方式实现:
$unpacked = unpack('H*hex', mb_convert_encoding($originalStr, 'Windows-1250', 'UTF-8')); echo $unpacked['hex']; // 同样得到正确结果
注意事项
- 确保PHP的
mbstring扩展已启用(大部分环境默认启用,如果没开需要在php.ini里开启) - 如果你的MSSQL数据库使用了其他编码,需要对应调整转换目标编码,但根据你给出的结果,
Windows-1250是完全匹配的。
内容的提问来源于stack exchange,提问作者Flegy
相关产品推荐
相关产品推荐

