代码之家  ›  专栏  ›  技术社区  ›  Ke.

UTF-8与Latin1 mysql,索引未在UTF-8上使用

  •  8
  • Ke.  · 技术社区  · 14 年前

    我尝试过用UTF-8和Latin1字符集创建mysql表。当我使用Latin1时,使用我的索引,当我使用UTF-8时,在选择/限制记录时不使用索引。是不是我在字符集上遗漏了什么导致这种情况发生的原因?

    干杯

    3 回复  |  直到 14 年前
        1
  •  8
  •   Quassnoi    14 年前

    只有当表达式的排序规则与索引列上的排序规则匹配时,才能使用索引。

    如果表达式是 COERCIBILITY 2 ),列的排序规则将强制转换为表达式的排序规则,并且不使用索引。

    通常,文字有 属于 4 3

    但是,如果在一个 JOIN UNION

    在这种情况下,您应该为要转换的列提供显式排序规则(很可能是您想要转换的列) latin1 UTF8 ),这应该是要强制转换到的列的排序规则:

    SELECT  *
    FROM    utf_table
    JOIN    latin_table
    ON      utf_column = latin_column COLLATE UTF8_GENERAL_CI
    
        2
  •  3
  •   Ke.    14 年前

    我现在明白了,我加入的表不是同一个字符集

    DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    一旦我更改了这些索引,它们就工作得很好。

        3
  •  1
  •   soulmerge    14 年前

    ß