sql >> Databasteknik >  >> RDS >> Mysql

UTF-8 vs Latin1 mysql, index används inte på utf-8

Index kan endast användas när uttryckets sortering matchar den i den indexerade kolumnen.

Om uttryckets COERCIBILITY är lägre än kolumnen (det vill säga 2 ), castas kolumnens sortering till uttryckets och indexet används inte.

Normalt har bokstaver COERCIBILITY av 4 och användarvariabler som för 3 , så detta borde inte vara ett problem.

Men om du blandar olika sorteringar i en JOIN eller UNION , castordningen är inte garanterad.

I det här fallet bör du ange explicit sortering till kolumnen du castar (sannolikt vill du casta latin1 till UTF8 ), och detta bör vara sammanställningen av kolumnen du castar till:

SELECT  *
FROM    utf_table
JOIN    latin_table
ON      utf_column = latin_column COLLATE UTF8_GENERAL_CI


  1. Aggregerad strängsammansättning i Oracle 10g

  2. Hur IF-utlåtandet fungerar i SQL Server

  3. Django-DB-migrationer:kan inte ALTER TABLE eftersom den har väntande triggerhändelser

  4. Slumpmässig post från mysql-databas med CodeIgniter