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

PHP读取MySQL BLOB并转换为整数数组的技术咨询

把MySQL BLOB字段读取为整数数组(字节替代方案)

你说得对,PHP确实没有原生的字节数据类型,我们通常用0-255范围的整数来表示单个字节,这完全可以满足你的需求。

看你当前的代码,用unpack("H*", $vector)得到的是二进制数据转成的十六进制字符串,这显然不是你想要的整数数组。我们可以换用unpack的另一个格式符来直接得到字节对应的整数数组:

解决方案代码

<?php
$mysqli = mysqlConnect();
$query = $mysqli->query("SELECT * FROM vectors LIMIT 2;");
echo "<pre>"; // 用pre标签让输出更整齐
while ($row = mysqli_fetch_assoc($query)) {
    $date = $row["date"]; // DATETIME字段
    $vector = $row["vector"]; // BLOB字段
    echo $date . "\t";
    
    // 关键:用C*解包成无符号字节数组(每个元素是0-255的整数)
    $byteArray = unpack("C*", $vector);
    // 可选:把数组索引改成从0开始(默认unpack返回的是1起始的索引)
    $byteArray = array_values($byteArray);
    
    var_dump($byteArray);
    echo "\n";
}
echo "</pre>";
?>

关键说明

  • unpack("C*", $vector):C是unpack的格式符,代表无符号字符(每个占1字节),*表示处理所有剩余的字节。这样会返回一个数组,每个元素对应BLOB中一个字节的整数值(范围0-255)。
  • 如果你的BLOB存储的是有符号字节(范围-128到127),可以把C*换成c*(小写c)。
  • array_values($byteArray):因为unpack默认返回的数组是从1开始索引的,如果你习惯0起始的数组(像大多数编程语言的字节数组那样),可以用这个函数重新索引。

示例输出

假设你的BLOB字段存储的是字节序列0x01 0x0A 0xFF,那么var_dump会输出:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(10)
  [2]=>
  int(255)
}

这样就完美实现了把BLOB字段读取为整数数组的需求啦。

内容的提问来源于stack exchange,提问作者Kamil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:42:14