Seata中字段中包含json的undoLog回滚时报 Cannot create a JSON value from a string with CHARACTER SET 'binary'的情况吗?
tableMeta中对应的JSON列对应的dataTypeName是JSON, 回滚时生成的update语句里插入的是字符串
seata 1.6.1 AT模式,搜了下看到一个类似的issue https://github.com/apache/incubator-seata/issues/5107
是的,Seata中字段中包含JSON的undoLog回滚时可能会遇到这个问题。当使用AT模式(Application Transaction)进行分布式事务处理时,Seata会将事务中的操作记录在undoLog中。如果表中的某个字段是JSON类型,那么在生成undoLog时,Seata会将该字段的值转换为字符串形式。然而,在某些情况下,这个字符串可能包含非ASCII字符,导致无法将其转换为JSON值。
为了解决这个问题,你可以尝试以下方法:
确保数据库和表的字符集设置为支持存储非ASCII字符的字符集,例如utf8mb4。
在插入数据之前,对包含非ASCII字符的字符串进行编码转换,例如使用utf8mb4
编码。
在读取数据时,对包含非ASCII字符的字符串进行解码转换,例如使用utf8mb4
编码。
如果可能的话,尝试升级到更高版本的Seata,因为新版本可能已经解决了这个问题。
如果是driver问题就升级下driver处理下,应该是通过driver拿到的元数据存在问题,导致序列化上有问题,你这个issue里没有异常的具体堆栈,只有一个日志。此回答来自钉群3群-Apache Seata(incubating) 开源讨论群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。