【 TiDB 使用环境】生产环境 /测试/ Poc
varchar和bigint 关联之后 字段长度超过10多位 就出现关联异常,除了修改表结构和sql转换外,是否有参数可以控制这个现象。
id =2 的数据是关联异常的数据
能把复现脚本发文字么?对着截图敲一遍太麻烦了~
老哥来了
show CREATE table test.t1
CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
INSERT INTO `t1` (`id`, `name`) VALUES (1, '123456789012345611');
INSERT INTO `t1` (`id`, `name`) VALUES (2, '123456789012345612');
INSERT INTO `t1` (`id`, `name`) VALUES (3, '123123');
show CREATE table test.t2
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`name` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
INSERT INTO `t2` (`id`, `name`) VALUES (1, 123456789012345611);
INSERT INTO `t2` (`id`, `name`) VALUES (2, 123456789012345611);
INSERT INTO `t2` (`id`, `name`) VALUES (3, 123123);
select t1.*,t2.* from test.t1 ,test.t2 where t1.name =t2.name
已经有人提issuess。看上去这里的表现和mysql是一致的。
https://github.com/pingcap/tidb/issues/48860
https://github.com/pingcap/tidb/issues/47792
除了改表结构和手工转换类型以外,没看到有其他更好的解决方案。
应该要尽量避免让数据库做隐式转换,用不到索引,效率低下而且容易出现各种各样的问题
强制转换。
数据库隐式转换,转换不了时就会报错
任何情况下都要避免隐式转换
要复线 挺难的
通过cast是暂时解决方案,而且要是线上业务SQL肯定不容易改,既然优化器已经给做转换了 那就是说明以上到数据类型差异,只是转换后有丢失,归根结底是产品需要优化改进
本来不想说,mysql 不算是tidb的竞品,但某竞品为啥没问题
不难啊,执行楼主的语句就复现出来了。
是不是没有做类型转换?
我不是测的mysql
issues里明确了,tidb的表现和mysql的表现是一致的。侧面印证了完美支持了mysql的语法
这种兼容不要也罢
那肯定是取其精华,去其糟粕