问题现象:
同事反馈,将mysql mediumblob类型数据迁移到达梦数据库后,前台读取部分数据失败,怀疑达梦数据库不完全兼容MySQL mediumblob类型数据。
测试结论:
本次测试,通过达梦DTS迁移工具,将一条mysql mediumblob类型数据迁移到达梦数据库,可以正常迁移,正常显示数据,通过数据对比,并没有发现不兼容的问题。
测试过程如下:
源库:MySQL 5.7.36
目标库:8.1.2.114
源库:MySQL 5.7.36
创建测试表t0
mysql> create table t0(id int,x mediumblob);
上传下面的图片,到/home/mysql/tmp目录下
select load_file('/home/mysql/tmp/001.png');
select LENGTH(load_file('/home/mysql/tmp/001.png')); ---154561
将图片插入表
insert into t0 values (1,load_file('/home/mysql/tmp/001.png'));
查看数据
select * from t0;
查看---图像
通过达梦DTS进行数据迁移
达梦数据库8.1.2.114
迁移
[dmdba@cjc-db-04 tool]$ pwd
/dm8/dbms/tool
[dmdba@cjc-db-04 tool]$ sh dts
或使用windows客户端工具
通过DM管理工具查看迁移后的数据
可以正常显示图片,那么如何对比数据是否完全一致?
将MySQL和达梦数据库数据转换为16进制,对比是否一致:
其中MySQL需要hex函数,达梦数据库在disql工具下默认自动转换为16进制,不需要转换。
源库:
mysql> select hex(x) from t0G;
[mysql@cjc-db-03 ~]$ mysql -ucjc -p*** -e "select hex(x) from cjc.t0" > t0.log
cat t0.log
89504E470D0A1A0A0000000D49484452000001A70000016D0806000000A......
目标库:
通过disql工具查看达梦数据
数据超长,默认自动截断,并以16进制显示
[70004]:String truncate.
需要先设置long
set long 99999999
select x from t0;
LINEID x
----------
1 0x89504E470D0A1A0A0000000D49484452000001A70...
用notepad比较,数据完全一致
通过本次测试,达梦数据库兼容MySQL mediumblob类型数据,对应达梦BLOB类型。
###chenjuchao 20240226###