转换为 CHAR 导致 VARCHAR 列上的索引不起作用
CONVERT to CHAR cause index on VARCHAR column doesn't work
SELECT * FROM table1 WHERE a = '1';
SELECT * FROM table1 WHERE a = CONVERT(1, CHAR);
a列是VARCHAR类型,我已经在上面建立了索引。第一个使用索引,但第二个不使用。有什么线索吗?
我怀疑可能MySQL把CHAR和VARCHAR当成两种不同的类型,所以我把a列改成了CHAR,索引也不行。
听起来像是 CHARACTER SET
或 COLLATION
的问题。请提供:
SHOW VARIABLES LIKE 'char%';
how you are connecting to the database
SHOW CREATE TABLE table1;
可能答案涉及更改 CONVERT
:
CONVERT(1, CHAR charset utf8)
什么是真正的查询;可能有一些其他方法更适合您的情况。使用 CONVERT
是一个错误;让我们来看看它的需要。
要查看转化,请执行
EXPLAIN FORMAT=JSON SELECT ...
SELECT * FROM table1 WHERE a = '1';
SELECT * FROM table1 WHERE a = CONVERT(1, CHAR);
a列是VARCHAR类型,我已经在上面建立了索引。第一个使用索引,但第二个不使用。有什么线索吗?
我怀疑可能MySQL把CHAR和VARCHAR当成两种不同的类型,所以我把a列改成了CHAR,索引也不行。
听起来像是 CHARACTER SET
或 COLLATION
的问题。请提供:
SHOW VARIABLES LIKE 'char%';
how you are connecting to the database
SHOW CREATE TABLE table1;
可能答案涉及更改 CONVERT
:
CONVERT(1, CHAR charset utf8)
什么是真正的查询;可能有一些其他方法更适合您的情况。使用 CONVERT
是一个错误;让我们来看看它的需要。
要查看转化,请执行
EXPLAIN FORMAT=JSON SELECT ...