Гуджарати започва રેલવે , правилно? И маляламът започва നേപ , правилно? И англичаните трябваше да включват 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 символи.