dba-kit
(张天师)
1
如图所示,对比结果显示需要新增9424条数据,同时删除9424条数据。但是我从fix-on-target的目录里抽查了10几条不一致的数据,同时在MySQL和TiDB上查询了下,两者其实是一样的。
分析后发现fix-sql里,有两个文件(应该代表两个不同的核对批次),分别有一条DELETE FROM和REPLACE INTO语句,感觉应该在分批核对时候,找错索引了。
# Diff Configuration.
######################### Global config #########################
check-thread-count = 2
export-fix-sql = true
check-struct-only = false
dm-addr = "http://******:8261"
dm-task = "task1"
######################### Task config #########################
[task]
output-dir = "./diff_dir"
target-check-tables = ["db.tb"]
1 个赞
dba-kit
(张天师)
2
破案了,是COLLATE导致的,TiDB默认是utf8mb4_bin,区分大小写;而MySQL默认是utf8_unicode_ci,不区分大小写,所以会导致同样的where条件,在MySQL里和TiDB里获取到的数据不一样,所以对比失败了。
1 个赞
dba-kit
(张天师)
4
额,还是不可以,发现即便是utf8mb4_unicode_ci,TiDB也是会区分大小写。。
复现方法:
CREATE TABLE `test`.`t1` (
`name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
insert into test.t1 values ('a357cd6b934f4f9ca600951f73fd4316'), ('WA-TRADEAVQ79KJUNBGD');
dba-kit
(张天师)
5
是没有开启这个导致,5.X(包括)以下是默认关闭的,不管设置哪个collation,TiDB都是二进制比较
system
(system)
关闭
6
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。