突然发现有一个表数据都存在,但是查单条不出来结果,删除索引后,又能查,创建索引以后又查不了。

@bingoku , select tidb_version(); 看下

show create table data_repair_logs; 看下?

@bingoku 你方便 teamview 吗?

加你了。

:+1::+1::+1:

麻烦提供一下 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,也能正常查询的。让他们技术人员在核查验证一下吧。

:+1::+1::+1:

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 分钟后被自动关闭。不再允许新回复。