开发者社区 > 云原生 > 中间件 > 正文

Seata中字段中包含json的undoLog回滚时报这个怎么解决?

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

展开
收起
小小鹿鹿鹿 2024-01-09 23:35:40 72 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,Seata中字段中包含JSON的undoLog回滚时可能会遇到这个问题。当使用AT模式(Application Transaction)进行分布式事务处理时,Seata会将事务中的操作记录在undoLog中。如果表中的某个字段是JSON类型,那么在生成undoLog时,Seata会将该字段的值转换为字符串形式。然而,在某些情况下,这个字符串可能包含非ASCII字符,导致无法将其转换为JSON值。

    为了解决这个问题,你可以尝试以下方法:

    1. 确保数据库和表的字符集设置为支持存储非ASCII字符的字符集,例如utf8mb4。

    2. 在插入数据之前,对包含非ASCII字符的字符串进行编码转换,例如使用utf8mb4编码。

    3. 在读取数据时,对包含非ASCII字符的字符串进行解码转换,例如使用utf8mb4编码。

    4. 如果可能的话,尝试升级到更高版本的Seata,因为新版本可能已经解决了这个问题。

    2024-01-13 18:16:50
    赞同 展开评论 打赏
  • 如果是driver问题就升级下driver处理下,应该是通过driver拿到的元数据存在问题,导致序列化上有问题,你这个issue里没有异常的具体堆栈,只有一个日志。此回答来自钉群3群-Apache Seata(incubating) 开源讨论群。

    2024-01-10 07:53:52
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
《Seata 1.3 新特性以及如何参与社区》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载