mysqldump使用--hex-blob参数时能否将字段默认值也导出为十六进制
问题结论
你所使用的10.3.31-MariaDB版本的mysqldump没有原生参数可以实现二进制字段默认值导出为十六进制格式的需求,--hex-blob参数的生效范围仅覆盖表内的行数据,不会处理CREATE TABLE语句中的DEFAULT默认值部分。
可行解决方案
- 升级MariaDB客户端到10.5及以上版本
从MariaDB 10.5版本开始,官方将mysqldump更名为mariadb-dump,新增了二进制字段默认值的十六进制导出支持,导出时加上--hex-blob参数即可同时处理行数据和表结构中的二进制默认值。 - 分开导出结构与数据手动修正
先加--no-data参数导出表结构,手动把其中的二进制默认值替换为对应十六进制格式,再加--hex-blob --no-create-info参数导出行数据,最后把两部分内容合并即可。 - 脚本处理现有导出文件
若暂时无法升级客户端,也不想手动修改,可以用以下shell命令直接处理已导出的sql文件,自动将binary(16)类型的二进制默认值转换为十六进制格式:sed -E "s/binary\(16\) NOT NULL DEFAULT '([^']+)'/binary(16) NOT NULL DEFAULT 0x$(hexdump -ve '/1 "%02x"' <<< '\1')/g" 原导出文件.sql > 处理后文件.sql - 避免编辑时乱码的临时方案
如果只是需要临时编辑导出文件不想做格式转换,可以用二进制模式打开vim避免编码自动转换导致的乱码损坏:vim -b 导出文件.sql
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

