Co se stalo:
- máte data kódovaná utf8 (dobře)
SET NAMES latin1
byl v platnosti (výchozí, ale nesprávný)- sloupec byl deklarován jako
CHARACTER SET latin1
(výchozí, ale chybné)
Jak jste INSERTed
data byla převedena na latinku1, která nemá hodnoty pro arabské (kurdské/farsí/atd.) znaky, takže je nahradily otazníky.
Lék (pro budoucí INSERTs
):
- data kódovaná utf8 (dobrá)
mysqli_set_charset('utf8')
(nebo cokoli, co váš klient potřebuje k vytvořeníCHARACTER SET
)- zkontrolujte, že výchozí sloupce a/nebo tabulka jsou
CHARACTER SET utf8
- Pokud zobrazujete na webové stránce,
<meta...utf8>
by měl být blízko vrcholu.
Výše uvedená diskuse se týká CHARACTER SET
, kódování znaků. Nyní tip na COLLATION
, který se používá pro porovnávání a řazení.
Chcete-li znovu zkontrolovat, zda jsou data správně uložena, proveďteSELECT col, HEX(col)...
.هرچوون
by se měl vrátit D987E2808CD8B1DA86D988D988D986
Arabské znaky v utf8 mají hex D8xx nebo D9xx.
(utf8mb4
funguje stejně dobře jako utf8
; buď funguje pro arabštinu.)
Špatná zpráva:Data, která byla vložena a převedena na „???“ nelze obnovit.