Gujarati börjar રેલવે , korrekt? Och Malyalam börjar നേപ , korrekt? Och engelskan borde ha inkluderat Bureau’s .
Detta är det klassiska fallet med
- Byten du har i klienten är korrekt kodad i utf8. (
Bureauär kodad i delmängden Ascii/latin1 av utf8; men’är inte ascii-apostrof.) - Du ansluter med
SET NAMES latin1(ellerset_charset('latin1')eller ...), förmodligen som standard. (Det borde ha varitutf8.) - Kolumnen i tabellen deklarerades
CHARACTER SET latin1. (Eller möjligen ärvdes det från tabellen/databasen.) (Det borde ha varitutf8.)
fixen för data är en "2-stegs ALTER".
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
där längderna är tillräckligt stora och de andra "..." har vad som helst (NOT NULL , etc) fanns redan i kolumnen.
Tyvärr, om du har många kolumner att arbeta med, kommer det att krävas många ALTER. Du kan (bör) MODIFY alla nödvändiga kolumner till VARBINARY för en enda tabell i ett par ALTERs .
fixen för koden är att upprätta utf8 som anslutning; detta beror på vilket api som används i PHP. ALTERs kommer att ändra kolumndefinitionen.
Redigera
Du har VARCHAR med fel CHARACTER SET . Därför ser du Mojibake som રેલ . De flesta konverteringstekniker försöker bevara રેલ , men det är inte vad du behöver. Ta istället ett steg till VARBINARY bevarar bitarna samtidigt som den gamla definitionen av bitar som representerar latin1-kodade tecken ignoreras. Det andra steget bevarar bitarna igen, men hävdar nu att de representerar utf8-tecken.