phpmyadmin 无 raw 二进制导出选项,因其 web 架构需经 php 处理、http 输出,受限于字符集转换与输出缓冲;hex 仅为字符串表示,非原始字节流;真正 raw 导出须用 into dumpfile、mysqldump 配合解析脚本或直连 mysql 启用二进制协议。
phpmyadmin 默认导出二进制字段(如 blob、varbinary)时会转义为十六进制字符串(如 0x89504e47...),这不是 raw;要真正以原始字节流导出,必须绕过 phpmyadmin 的默认编码逻辑——它本身不提供“raw 二进制导出”开关。
为什么 phpMyAdmin 没有 RAW 导出选项
phpMyAdmin 是 Web 界面工具,所有数据经 PHP 层处理后再 HTTP 输出。PHP 对二进制数据的输出控制受限于:header() 设置、输出缓冲、字符集转换(如自动 UTF-8 转义)、以及导出格式驱动(如 SqlExport 或 CsvExport)本身的设计目标是「可读/可重导入」,而非保留原始字节。即使选择 HEX 格式,也只是把二进制转成十六进制字符串,不是原始字节流。
- 导出格式下拉菜单里的
SQL、CSV、JSON都不支持 RAW 字节输出 -
HEX选项仅影响BLOB字段在 SQL 插入语句中的表示方式(如INSERT ... VALUES (0x...)),仍属文本格式 - phpMyAdmin 的
Export功能不调用fopen(..., 'rb')直接读取磁盘文件,无法跳过 PHP 的字符串处理层
替代方案:用 SELECT + INTO DUMPFILE(需权限与路径可控)
若你有 MySQL 的 FILE 权限,且能访问服务器文件系统,可用原生命令将单个 BLOB 字段直接写为 RAW 文件:
SELECT content FROM my_table WHERE id = 123 INTO DUMPFILE '/var/lib/mysql-files/photo.png';
注意:
- 路径必须是 MySQL 配置的
secure_file_priv目录(查SHOW VARIABLES LIKE 'secure_file_priv';) -
content字段必须是BLOB或VARBINARY,不能是TEXT类型 - 该操作不经过 phpMyAdmin 导出流程,而是由 MySQL 服务端直接写盘,字节完全一致
- phpMyAdmin 中执行此语句需开启「允许运行多个查询」,且结果无返回(成功即写入)
更通用的做法:用 mysqldump + 自定义脚本还原 RAW
如果要导出整张表并保留 BLOB 原始内容,mysqldump 的 --hex-blob 是默认行为(输出 0x...),但你可以关掉它,让 BLOB 以 ASCII 兼容的转义序列(如

