Mysql 在VARCHAR列上转换为CHAR原因索引不';行不通

Mysql 在VARCHAR列上转换为CHAR原因索引不';行不通,mysql,database-performance,Mysql,Database Performance,列a是VARCHAR类型,我已经在它上面创建了一个索引。第一个使用索引,但第二个不使用。有线索吗 我怀疑MySQL可能将CHAR和VARCHAR作为两种不同的类型,因此我将列a更改为CHAR,索引也不起作用。听起来像是字符集或排序问题。请提供: SELECT * FROM table1 WHERE a = '1'; SELECT * FROM table1 WHERE a = CONVERT(1, CHAR); 答案可能包括更改转换: SHOW VARIABLES LIKE 'char%';

列a是VARCHAR类型,我已经在它上面创建了一个索引。第一个使用索引,但第二个不使用。有线索吗


我怀疑MySQL可能将CHAR和VARCHAR作为两种不同的类型,因此我将列a更改为CHAR,索引也不起作用。

听起来像是
字符集
排序问题。请提供:

SELECT * FROM table1 WHERE a = '1';
SELECT * FROM table1 WHERE a = CONVERT(1, CHAR);
答案可能包括更改
转换

SHOW VARIABLES LIKE 'char%';
how you are connecting to the database
SHOW CREATE TABLE table1;
真正的疑问是什么;可能还有其他更适合您的方法。使用
CONVERT
是一个难题;让我们来谈谈它的需要

要查看转换,请执行以下操作


如何更改列的类型?这是db引擎的正常行为。。如果对列执行函数,则不使用索引。。使用用于区分数据类型的字符,无法使用索引。。尝试转换为varchar..我没有对列执行任何函数。我已经将列数据类型更改为CHAR,它应该与转换后的值相同,但是索引仍然不能使用。@Neo你怎么知道索引没有被使用?当您对该查询运行
EXPLAIN
时,您是否会在最后得到“使用索引”?如果没有,能否提供表的完整
CREATE TABLE
语法和完整
SELECT
语句?请参阅@scaisEdge-索引列不在函数调用中,因此您的注释不应该相关
CONVERT(…)
应该是一个常量,在编译时转换,并且应该是
'1
,但可能有不同的字符集/排序规则。这种差异阻止了
索引的使用。
CONVERT(1, CHAR  charset utf8)
EXPLAIN FORMAT=JSON SELECT ...