我尝试使用UTF-8和Latin1字符集创建mysql表。当我使用Latin1时,我的索引被使用,但当我使用UTF-8时,在选择/限制记录时索引没有被使用。是否有什么我忽略的字符集设置导致这种情况发生?祝好!Ke
只有当表达式的排序规则与索引列上的排序规则相匹配时,才能使用索引。
如果表达式的 COERCIBILITY
低于列的 COERCIBILITY
(即 2
),则将列的排序规则强制转换为表达式的排序规则,并且不使用索引。
通常,字面量的 COERCIBILITY
为 4
,用户变量的 COERCIBILITY
为 3
,因此这应该不是问题。
但是,如果您在 JOIN
或 UNION
中混合使用不同的排序规则,则无法保证转换顺序。
在这种情况下,您应该为要强制转换的列提供显式的排序规则(最可能是您想将 latin1
转换为 UTF8
),并且这应该是您要转换到的列的排序规则:
SELECT *
FROM utf_table
JOIN latin_table
ON utf_column = latin_column COLLATE UTF8_GENERAL_CI
DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
我改变了这些内容后,索引就正常工作了。