开发者社区> 问答> 正文

canal如何处理mysql中的blob数据类型?

求大神请教canal中是如何处理mysql中的blob数据类型? 在网上查找到的资料如下(不知道是否正确):

Canal 将 binlog 中的值序列化成了 String 格式给下游程序,因此在 Blob 格式的数据序列化成 String 时为了节省空间,强制使用了 IOS_8859_0 作为编码。因此,在如下情况下会造成中文乱码:

同步服务 JVM 使用了 UTF-8 编码 BLOB 字段中存储有中文字符

作者:haitaoyao 链接:https://www.jianshu.com/p/be3f62d4dce0 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

求大神指导!

原提问者GitHub用户alexlgj

展开
收起
绿子直子 2023-05-09 08:07:28 238 0
2 条回答
写回答
取消 提交回答
  • 按照iso8859-1进行反解为bytes[]即可

    原回答者GitHub用户agapple

    2023-05-09 19:37:35
    赞同 展开评论 打赏
  • Canal 将 MySQL 中的 Blob 类型数据序列化后以 String 格式进行传输,但 Blob 类型的数据可能包含二进制数据或者非 ASCII 字符,因此在序列化时会采用 ISO-8859-1 编码,这样可能会导致中文或者其他非 ASCII 字符乱码的问题。有两种方法可以解决这个问题:

    设置 Canal Server 和客户端解析数据的编码方式 如果您希望正常地接收包含中文或其他非 ASCII 字符的 Blob 数据,可以在 Canal Server 和客户端中设置对应的编码方式,例如将 Charset 设置为 UTF-8,这样就可以解决中文乱码的问题了。

    Canal Server 可以通过修改配置文件中的 canal.instance.connectionCharset 属性来设置连接字符集;而客户端(如 Java 程序)也可以通过设置连接参数的字符串编码方式来解决乱码问题。

    在客户端程序中通过字符集转换的方式解决乱码问题 如果您无法在 Canal Server 和客户端中设置对应的编码方式,也可以在客户端程序中对 Blob 数据进行字符集转换处理,例如使用 Java 的 String.getBytes(Charset charset) 方法来将 ISO-8859-1 编码的字符串转换成 UTF-8 编码的字符串。

    2023-05-09 09:01:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像