Gujarati starter રેલવે
, korrekt? Og Malyalam starter നേപ
, korrekt? Og englænderne burde have inkluderet Bureau’s
.
Dette er det klassiske tilfælde af
- De bytes du har i klienten er korrekt kodet i utf8. (
Bureau
er kodet i Ascii/latin1-undersættet af utf8; men’
er ikke ascii-apostrof.) - Du har forbindelse med
SET NAMES latin1
(ellerset_charset('latin1')
eller ...), sandsynligvis som standard. (Det skulle have væretutf8
.) - Kolonnen i tabellen blev erklæret
CHARACTER SET latin1
. (Eller muligvis blev det arvet fra tabellen/databasen.) (Det skulle have væretutf8
.)
rettelsen til dataene er en "2-trins ALTER".
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
hvor længderne er store nok og de andre "..." har alt andet (NOT NULL
osv.) var allerede på kolonnen.
Desværre, hvis du har mange kolonner at arbejde med, vil det tage mange ALTERs. Du kan (bør) MODIFY
alle de nødvendige kolonner til VARBINARY
for en enkelt tabel i et par ALTERs
.
rettelsen til koden er at etablere utf8 som forbindelsen; dette afhænger af det api, der bruges i PHP. ALTERs
vil ændre kolonnedefinitionen.
Rediger
Du har VARCHAR
med det forkerte CHARACTER SET
. Derfor ser du Mojibake som રેલ
. De fleste konverteringsteknikker forsøger at bevare રેલ
, men det er ikke det, du har brug for. Tag i stedet et skridt til VARBINARY
bevarer bits og ignorerer den gamle definition af bits, der repræsenterer latin1-kodede tegn. Det andet trin bevarer igen bitsene, men hævder nu, at de repræsenterer utf8-tegn.