sql >> Database >  >> RDS >> Mysql

UTF-8 vs Latin1 mysql, indexen niet gebruikt op utf-8

Indexen kunnen alleen worden gebruikt als de sortering van de expressie overeenkomt met die in de geïndexeerde kolom.

Als de uitdrukking COERCIBILITY . is lager is dan die van de kolom (dat is 2 ), wordt de sortering van de kolom gecast naar die van de uitdrukking en wordt de index niet gebruikt.

Normaal gesproken hebben letterlijke waarden COERCIBILITY van 4 en gebruikersvariabelen die van 3 , dus dit zou geen probleem moeten zijn.

Als u echter verschillende sorteringen combineert in een JOIN of UNION , de cast-volgorde is niet gegarandeerd.

In dit geval moet u een expliciete sortering opgeven voor de kolom die u cast (waarschijnlijk wilt u latin1 casten naar UTF8 ), en dit zou de sortering moeten zijn van de kolom waarnaar u cast:

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


  1. De beste manier om SQL-query's in PHP te beveiligen

  2. Eenvoudige recursieve boom in PHP / MySQL

  3. Oplossingen voor INSERT OF UPDATE op SQL Server

  4. Echo-menustructuur met recursieve functie