求大神请教canal中是如何处理mysql中的blob数据类型? 在网上查找到的资料如下(不知道是否正确):
Canal 将 binlog 中的值序列化成了 String 格式给下游程序,因此在 Blob 格式的数据序列化成 String 时为了节省空间,强制使用了 IOS_8859_0 作为编码。因此,在如下情况下会造成中文乱码:
同步服务 JVM 使用了 UTF-8 编码 BLOB 字段中存储有中文字符
作者:haitaoyao 链接:https://www.jianshu.com/p/be3f62d4dce0 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
求大神指导!
原提问者GitHub用户alexlgj
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 编码的字符串。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。