Гуджарати започва રેલવે
, правилно? И маляламът започва നേപ
, правилно? И англичаните трябваше да включват Bureau’s
.
Това е класическият случай на
- Байтовете, които имате в клиента, са правилно кодирани в utf8. (
Bureau
е кодиран в подмножеството Ascii/latin1 на utf8; но’
не е апострофът на ascii.) - Свързахте се с
SET NAMES latin1
(илиset_charset('latin1')
или ...), вероятно по подразбиране. (Трябваше да еutf8
.) - Колоната в таблицата е декларирана
CHARACTER SET latin1
. (Или е възможно да е наследен от таблицата/базата данни.) (Трябваше да еutf8
.)
Корекцията за даннитета е "2-стъпка ALTER".
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
където дължините са достатъчно големи, а другият "..." има каквото и да е друго (NOT NULL
и т.н.) вече беше в колоната.
За съжаление, ако имате много колони, с които да работите, ще са необходими много ALTER. Можете (трябва) да MODIFY
всички необходими колони към VARBINARY
за една таблица в двойка ALTERs
.
Корекцията на кодата е да се установи utf8 като връзка; това зависи от API, използван в PHP. ALTERs
ще промени дефиницията на колоната.
Редактиране
Имате VARCHAR
с грешен CHARACTER SET
. Следователно виждате Mojibake като રેલ
. Повечето техники за преобразуване се опитват да запазят રેલ
, но това не е това, от което се нуждаете. Вместо това предприемете стъпка към VARBINARY
запазва битовете, като игнорира старата дефиниция на битовете, представляващи символи, кодирани с latin1. Втората стъпка отново запазва битовете, но сега твърди, че представляват utf8 символи.