logo
社区首页 / 全域数据集成平台 / 问题详情
标题
SQLSERVER增量同步到MYSQL时,中文字符无法匹配一致
0
用户头像
楼主:1995153****
主题:1     回复:10     获赞:0 注册日期:2023-05-30

timestamp格式也无法匹配一致,换成varchar类型之后就可以匹配了,但是汉字不知道如何解决,JDBC连接加上了useunicode=true&characterEncoding=utf-8还是没有效果

---------------------------------------------------
签名:
共16回答
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 16:47:35 #1

这个能具体一点吗? sql server的表和mysql的表结构给一下,我们来试一下. 给几个你测试不行的字段就成.

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 17:02:30 #2

#源表结构 CREATE TABLE [dbo].[PFXHD] ( [DJBH] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL, [RQ] datetime NULL, [DM1] varchar(20) COLLATE Chinese_PRC_CI_AS NULL, [QDDM] varchar(20) COLLATE Chinese_PRC_CI_AS NULL, )

CREATE TABLE [dbo].[PFXHDMX] ( [DJBH] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL, [MXBH] int IDENTITY(1,1) NOT NULL, [SPDM] varchar(20) COLLATE Chinese_PRC_CI_AS NULL, [GG1DM] varchar(20) COLLATE Chinese_PRC_CI_AS NULL, [GG2DM] varchar(20) COLLATE Chinese_PRC_CI_AS NULL, [SL] numeric(18,4) NULL, [DJ] numeric(18,4) NULL, [BZJE] numeric(18,4) NULL, )

#表输入SQL SELECT T1.DJBH,CONVERT(varchar(100), T1.RQ,120) AS RQ,T1.DM1 AS KHDM,T1.QDDM,T2.MXBH,T2.SPDM,T2.GG1DM,T2.GG2DM,T2.SL,T2.DJ,T2.BZJE FROM PFXHD T1 left JOIN PFXHDMX T2 ON T2.DJBH=T1.DJBH

#目标表结构 CREATE TABLE test ( MXBH int NOT NULL, djbh varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '单据编号', rq varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '日期', khdm varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '客户ID', qddm varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '渠道ID', SPDM varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '', GG1DM varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '', GG2DM varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '', SL decimal(18, 4) NULL DEFAULT NULL, DJ decimal(18, 4) NULL DEFAULT NULL, BZJE decimal(18, 4) NULL DEFAULT NULL, PRIMARY KEY (MXBH) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


-- Records of test


INSERT INTO test VALUES (27754, 'FA300005884', '2022-04-15 00:00:00', '9018', '000', 'HD4005鞋垫', 'GRAY', '235', 1.0000, 0.0000, 0.0000);

---------------------------------------------------
签名:
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 17:03:48 #3

好,我先试一下

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 17:07:07 #4

你提供的是mysql的示例数据,你应该是从sql server到mysql吧? 要提供一条sql server的示例数据

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 17:09:03 #5

数据是一样的额,MYSQL数据就是我全量同步过去的,两张表都用这条数据测就行了 两张表实际都已经存在这条数据了,每次匹配FLAG都是'U',如果我勾上其他含有中文的字段匹配,就会出现更多U

{"debugLevel":"1","processId":"647608e6b9ff37402f145591","transactionId":"6477030d1e7eb31db49c9e44","singleStep":"false","pageNo":1,"dataSourceId":"ETL_SQLSERVER_230530001","tableName":"","nodeId":"T00001","state":true,"total":1,"P_ENDFLAG":"1","P_PREV_NODEID":"T00005","data":[{"DJBH":"FA300005884","RQ":"2022-04-15 00:00:00","KHDM":"9018","QDDM":"000","MXBH":27754,"SPDM":"HD4005鞋垫","GG1DM":"GRAY","GG2DM":"235","SL":"1.0000","DJ":"0.0000","BZJE":"0.0000","P_TAG_IUD":"U"}]

图片alt

---------------------------------------------------
签名:
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 17:17:03 #6

你是用cdc实现增量的还是说用的ETL的离线实现增量的?

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 17:20:06 #7

图片alt

从mssql同步到mysql里面都正常啊

图片alt

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 17:23:39 #8

图片alt 是离线分批增量运算额

---------------------------------------------------
签名:
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 17:28:32 #9

中间这步增量运算,如果有中文字符,对比出来的'P_TAG_IU'一直是'U' 图片alt

---------------------------------------------------
签名:
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 17:43:45 #10

我先测试一下

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 21:18:30 #11

经过测试是因为你有三个数字类型的字段,在两边进行比较时因为精度不一样所以计算为更新了,这个问题在下一个版本会进行修复.

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 21:38:18 #12

#谢谢!我刚才也测了一下,数字计算确实也会出现类似问题, 图片alt 图片alt #但是当我不选中数字类型的字段,勾选SPDM字段之后还是会出现这种情况,不知道是不是我其他地方设置问题 图片alt 图片alt #最后我不勾选包含汉字的字段和数字类型字段时,就正常了 图片alt 图片alt #所以我目前的环境应该数字和汉字都会出现这种情况- -,请问您那边有针对中文字符做其他配置吗?

---------------------------------------------------
签名:
0
用户头像
回答者: 管理员
获赞:142 注册于:2017-07-02 回答于 2023-05-31 21:41:14 #13

图片alt 我这里只要不选数字就可以了,中文没有发现有问题.

---------------------------------------------------
签名:我是一个码农...
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 21:59:47 #14

好吧,可能还是环境兼容性有点不同,我这两张表在kettle同步都能过,下次更新timestamp类型精度兼容性也可以考虑优化一下,kettle这两个字段比较可以过 图片alt

---------------------------------------------------
签名:
0
用户头像
回答者: 1995153****
获赞:0 注册于:2023-05-30 回答于 2023-05-31 22:12:15 #15

这个差异从前端能调试出来吗?我用相同sql语句在kettle把这两张表又测了一遍,1秒就过了,这个问题研究一天了- -,强迫症都要犯了0-0 图片alt

---------------------------------------------------
签名: