暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KFS同步数据报错Incorrect string value: '\xF0\xAC\xBi\x96'for column

原创 董小姐 2026-02-09
130

问题描述

巡检KFS反向链路时发现一条反向链路宕掉,具体表现为:MySQL5.7向KES中插入了一个不可见字符导致编码为UTF8的MySQL库中同步插入数据报错:Incorrect string value: '\xF0\xAC\xBi\x96'for column。

分析过程

查看同步服务运行状态

fsrepctl services  

目标端显示offline:error

查看报错事务的解析

查看源和目标对象中列类型

源端和目标端表中对应的列长度一样。

源端

目标端

查看源端中字符长度

正常字符长度应该是2,而报错的字符长度是3,推测是一个不可见字符导致

查看目标端字符集

-- 一键检查所有关键编码设置
SELECT 
    @@character_set_server AS '服务器字符集',
    @@collation_server AS '服务器排序规则',
    @@character_set_database AS '数据库字符集',
    @@collation_database AS '数据库排序规则',
    @@character_set_client AS '客户端字符集',
    @@character_set_connection AS '连接字符集',
    @@character_set_results AS '返回字符集';

--查看报错表的字符集
show create table t_cs_interview_personnel_info;

分别输出如下:

解决办法

目标端中更改表字符集编码

-- 查看表当前字符集
SHOW CREATE TABLE 表名;

-- 查看所有列的字符集详情
SHOW FULL COLUMNS FROM 表名;

-- 修改表字符集
ALTER TABLE 表名 CHANGE 列名 数据类型 SET utf8mb4;
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 确认表结构
SHOW CREATE TABLE 表名;

-- 确认数据正常(抽查包含中文/特殊字符的字段)
SELECT 列名 FROM 表名  LIMIT 10;

KEF同步服务配置文件中增加字符集配置

  • 法一:适用于不确定安装目录位置
  • 法二:适用于明确知道安装目录位置

法一:static-mysql_target.properties文件中urlOptions选项追加参数后重启同步服务

1、更改static-mysql_target.properties文件中urlOptions后追加参数&useUnicode=true&characterEncoding=UTF-8

cd /data/kingbase/kfs/flykn/kfsrep/flysync/flysyno-replicator/conf
vim static-mysql_target.properties

2、重启同步服务:replicator restart

法二:flysync.ini文件中增加参数进行更新后重启同步服务

--查看static-mysql_source.properties 中 urlOptions 参数值
[flymk@localhost]cd /data/kingbase/kfs/flykn/kfsrep/flysync/flysyno-replicator/conf
[flymk@localhost conf]$ cat static-mysql_source.properties | grep urlOptions
replicator.datasource.global.connectionSpec.urlOptions=noPrepStmtCache=true&allowPublicKeyRetrieval=true

--flysync.ini中增肌参数
property=noPrepStmtCache=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8

--停止同步服务
replicator stop

--更新 必须是在安装目录下
cd /data/kingbase/kfs/flymk/KingbaseFlySync-V002R002C004PS003-replicator/tools
fspm update

--启动同步服务
replicator start

--查看同步服务并观察同步情况
fsrepctl services

注意:

修改urlOptions这种方案主要是处理数据库系统字符编码是utf8但是表字符编码是utf8mb4这种场景。因为默认情况下jdbc会根据数据默认系统字符编码插数据,系统编码是utf8的话,jdbc插特殊字符就识别不了,所以要指定。如果目标端本身就是MB4编码或者改成MB4之后,在mysql目标端的urlOptions后面追加一个&useUnicode=true&characterEncoding=UTF-8(static中查参数,然后复制到ini中配置,记得加property=)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论