You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:09