binlog2sql
binlog2sql copied to clipboard
Set类型解析有问题
CREATE TABLE `ttt` (
`id` int(11) NOT NULL,
`c1` set('a','b','c') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`c2` bit(16) DEFAULT NULL,
`c3` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
insert into ttt values(1,'c,a',b'11111','{"a":\'M&s\',"c":"asda"}');
解æåºæ¥çsqlå¦ä¸ï¼
INSERT INTO `test`.`ttt`(`c3`, `c2`, `c1`, `id`) VALUES ('{\"a\":\'M&s\',\"c\":\"asda\"}', '0000000000011111', ('a','c'), 1);
setç±»åçå¼éè¦åå¤çï¼è¦ç¨éå·joinä¸ä¸
谢谢反馈,已修复,fdb3fbd3d7138b9d6b9ce4744b0a886e2df25053
不好意思,提issue的时候忘记我自己对解析出来的set做了排序,所以上面说join可以解决问题,但是前提是你必须对解析出来的set做排序,我提了一个类似的bug给python-mysql-replication,你可以看看这里:issue 268
同样的,对于bit类型的处理也有问题:
INSERT INTO `test`.`ttt`(`c3`, `c2`, `c1`, `id`) VALUES ('{\"a\":\'M&s\',\"c\":\"asda\"}', '0000000000011111', ('a','c'), 1);
上面的'0000000000011111'应为b'0000000000011111',需要在前面加上b前缀,否则插入时会报错(取决于sql_mode),用解析出来的值进行匹配时,也会匹配错误。
好的,多谢反馈。bit和binary都有问题,我来修复
python-mysql-replication把bit类型返回成了string类型,L244,需要提pr