开发者社区> 问答> 正文

mysql同步中文到elasticsearch出现乱码

canal version :1.1.3 mysql version : 5.7.20 *elasticsearch version :6.6.2 mysql同步到elasticsearch出现乱码,mysql相应的中文字段使用utf8mb4编码,其他配置如下: | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql5.7.20/share/charsets/ |

canal连接数据库的配置如下: canal.instance.dbUsername=-- canal.instance.dbPassword=-- canal.instance.connectionCharset = UTF-8 canal.instance.enableDruid=false

请问这是哪里的问题呢? 猜测是connectionCharset配置的问题,但是实在不知道要配置什么,求指点。

原提问者GitHub用户1075482900

展开
收起
云上静思 2023-05-04 12:55:16 235 0
2 条回答
写回答
取消 提交回答
  • 分开两部分来看,首先单独部署canal server和client,看看中文显示是否正常,然后再接入es看看

    原回答者GitHub用户agapple

    2023-05-05 10:38:08
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    出现乱码可能是因为 MySQL 和 Elasticsearch 的字符集不一致,导致中文字符被错误地解析或转换。为了解决这个问题,可以尝试以下方法:

    MySQL 设置:将 MySQL 中的字符集设置为 utf8mb4,这样可以保证中文字符能够正确地保存和读取。可以通过修改 MySQL 配置文件(例如 my.cnf)来设置字符集,或者通过 SQL 语句来设置具体的表或列的字符集。

    Canal 设置:将 Canal 的连接字符集设置为 utf8mb4,这样可以保证从 MySQL 到 Canal 的数据传输不会出现乱码。可以在 Canal 的配置文件(例如 canal.properties)中设置 canal.instance.connectionCharset = utf8mb4。

    Elasticsearch 设置:将 Elasticsearch 中的字符集设置为 utf8mb4,这样可以保证中文字符能够正确地索引和查询。可以在 Elasticsearch 配置文件(例如 elasticsearch.yml)中设置 index.analysis.analyzer.default.type = custom,并使用 IK 等分词器进行索引和查询。

    需要注意的是,修改字符集可能会影响到数据的存储和查询,因此需要谨慎操作,并进行充分的数据备份和测试。同时,在进行字集设置时,需要保证 MySQL、Canal 和 Elasticsearch 的字符集一致,避免出现中文字符乱码等问题。

    2023-05-04 17:59:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云Elasticsearch体系架构与特性解析 立即下载
开源与云:Elasticsearch应用剖析 立即下载
《Elasticsearch全观测解决方案》 立即下载

相关镜像