@bingoku , select tidb_version(); 看下
show create table data_repair_logs; 看下?
加你了。
麻烦提供一下 sql_mode ,命令:show variables like ‘sql_mode’;
已经定位问题了,复现 SQL :
create table t (a varchar(10), index idx(a));
insert into t set a=“abc”;
alter table t change a a varchar(10) CHARACTER SET utf8mb4 BINARY NOT NULL;
select * from t use index(idx) where a=“abc”;
具体啥原因呢
能先简单解释下吗?是 ddl 的 bug?
2.x 遇到过一次,3.x 也有也复现,按照上面的提示,把索引的字符集改了下,就可以查询。 这个问题很奇怪,不是很多索引没设置utf8mb4,也能正常查询的。让他们技术人员在核查验证一下吧。
varchar 类型设置上 BINARY flag实际上没有效果的,但是 plan 在生成执行计划时,把 varchar 类型并有 BINARY flag 的列当成了 binary 类型,所以会给 a=“abc” 条件里面的 abc 添加多余的空格来查询。
最终其实是个 BUG,应该解决这个问题。
是的,感谢使用
未修复bug 前,可以用 alter change column 把binary flag 去掉即可绕过这个 bug. eg : alter table t change a a varchar(10);
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。