刘华
实验室:JS测试器
分类专栏
hadoop2篇
mysql1篇
nginx8篇
java5篇
架构设计3篇
信息安全6篇
前端开发2篇
数据同步6篇
AI7篇
其他9篇

SymmetricDS同步mysql时的中文乱码问题解决

liuhua-2019/7/4 17:45:58

我在试用SymmetricDS同步mysql时,中文出现了乱码,成为了??。经过一番尝试、研究,终于找到了原因。

我之前在mysql源库的jdbc连接中没有添加characterEncoding=utf8的参数,于是,SymmetricDS在自动创建的触发器,character_set_client是latin1。这样就使得通过触发器捕获到变化数据时,往sym_data表中插入的中文数据变成??。这样一来,同步到目标库中数据也是乱码了。

解决办法就是:

1、通过show triggers命令找到有问题的触发器,采用“drop trigger 触发器名”删除这些触发器。

2、在mysql源库的jdbc连接中添加characterEncoding=utf8的参数。(需要注意,参数之间的分隔符是&,而不是&)

3、重启SymmetricDS服务,等待自动重建触发器。

4、目标库的jdbc连接中也添加characterEncoding=utf8的参数。


经过对中文乱码问题的处理,我摸清了SymmetricDS的一些原理,整理如下:

1、SymmetricDS根据我们添加的触发器配置信息,自动在源库中创建触发器(对每个表,创建3个触发器:I、U、D,只创建当前组所在路由相关的触发器),通过触发器自动捕获变化数据,写入sym_data表中。

2、SymmetricDS每次启动的时候,会去检查触发器、系统表是否完整,如果缺少,会自动创建。当然,可以通过db.config.database=false来关闭自动创建的过程。

3、SymmetricDS的代码中,针对不同的数据库,编写了不同的触发器创建模板,如对于mysql,表更新触发器模板为updateTriggerTemplate 。



小钉 京ICP备16032583号-1