执行sql报错

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】4.2.1社区版
【问题描述】清晰明确描述问题


执行insert into table select … from table…语句报Incorrect string value这个错,在obclient通指定–default-character-set=utf8mb4也还是报这个错,两张表一样,字符集也一样,数据库字符集是utf8mb4, 查看官网说是已知bug,让执行 ALTER system SET _enable_static_typing_engine = false; 这个命令,但是4.2.1社区版已没有这个参数,请问这个怎么解决

1、看一下你的表的定义show create table 你的表名,看一下是不是有字段类型查询的时候需要转换;
2、查询一下你的原始数据前10条数据是怎么样的?才能进一步判断问题


我就是建了一个跟oceanbase.__all_virtual_sql_audit;一模一样的表,因为这个表是映射的内存,目前只能保留我们三个小时的sql,我们想要保留两天的,所以就建了一个一模一样的表,把数据落盘,所以字段名,字段类型这些不会有问题,数据也不会有问题,都是从原表抽的,除非原表的数据就是有问题的,最大可能就是上面官网说的那个已知bug,但是4.2.1已经找不到这个参数了,还有别的解决办法吗

我这边测试的是可以的,具体供参考如下:
1、查看内部表结构


2、创建一个跟内部一样的表 ob_sql_audit_test
create table ob_sql_audit_test as select * from oceanbase.__all_virtual_sql_audit where 1>2;
并查看创建的表结构如下(太多字段截图不全)

3、执行插入语句insert into ob_sql_audit_test select * from oceanbase.__all_virtual_sql_audit;

4、验证插入的数据有结果

ps:ob版本是
image


我按照你的步骤来了一遍,还是报错,看来是4.2.1社区版这个bug还没解决,4.2.2中解决了

2 个赞

当前工具使用的是odc进行查询的嘛?
具体版本看下show variables like ‘version%’;

可以一个一个字段试一下,看看那个字段报错了:
如果字段是非必须的可以排除这个字段
确实需要调整下备份表的这个字段类型,或者显示转换能不能解决

一开始用的是python脚本报错,后面试了下obclient 和 navicat,都报错

是query_sql 这个字段引起的

好的。目前把query_sql 字段去掉是可以查询了是吗。

看下你这个字段需要不,如果不需要可以去掉,需要的话看下表的字符集,调整下看能存储进去吗

是的


我做了两次测试 字符集设置也是utf8mb4 都没有问题 你查询一下 你具体的ob版本 贴出来看看
截屏2024-06-19 14.29.43


我后面在另一套集群上部署也没遇到这个问题,我们有两套测试环境和一套生产环境,其中一套测试环境一直遇到这个问题,另外两套没有问题

出问题的测试环境也是4210版本吗?

如果不是最新版本 可以考虑下升级下版本试试看。是否还有当前问题