sql >> Databasteknik >  >> RDS >> Mysql

Effekter av att uppdatera en tabell med rader från utf8_turkish_ci till utf8_general_ci?

Dina kolumner data lagras med hjälp av en teckenuppsättning. I det här fallet verkar det vara utf8.

När du använder dessa kolumner (till exempel gör jämställdhetsjämförelser eller beställer), använder MySQL en sammanställning. Varje kolumn har en standardsortering, som den ärver från tabellens standardsortering.

Index har kolumnens standardsortering inbakad i sig så att de kan fungera effektivt.

Du kan göra en jämställdhetsjämförelse som kvalificeras genom sammanställning. Till exempel i en JOIN du kan ange

ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name

eller kanske

ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)

Det borde eliminera din illegala blandning av kollationer utan att du behöver ändra ditt bord. Detta kan hjälpa dig att undvika databasändringen du frågar om. Men se upp, använd COLLATE kvalificerare kan besegra användningen av ett index. Om du har ett stort bord och förlitar dig på index för prestanda kan detta vara föga användbart.

Så, vad händer om du ändrar dina tabeller för att ändra standardsorteringen?

  1. Din data kommer inte att ändras (om du inte också ändrar teckenuppsättningen). Det är bra.
  2. Alla index som involverar kolumner med sorteringar kommer att återskapas.
  3. Dina jämförelser och beställningar kan ändras. Jag kan inte turkiska, så jag kan inte berätta vad som kan gå sönder. Men till exempel på spanska bokstäverna N och Ñ är inte samma. N kommer före Ñ i en spansk sammanställning, men i den allmänna sammanställningen behandlas de som samma. Det kan finnas någon aspekt av det turkiska alfabetet som fungerar likadant, så din ORDER BY resultaten blir felaktiga.

Men du kan fixa det genom att ange en COLLATE modifierare i din ORDER BY klausul.

ORDER BY (euro.village_name COLLATE utf8_turkish_ci)



  1. skicka objekt från Java till Oracle-proceduren

  2. MemoryError när du använder metoden read() vid läsning av en stor JSON-fil från Amazon S3

  3. Hur får man medelvärdet av de "mitten" värdena i en grupp?

  4. Få kolumninformation för en tabell eller vy i SQL Server (T-SQL:sp_columns)