Špatné zprávy. Nejprve však zkontrolujte:
SELECT col, HEX(col)...
abyste viděli, co je v tabulce. Pokud hex ukazuje 3F
, pak jsou data pryč. Při správném uložení dal
znak by měl být hexadecimální D8AF
; hah
je hex D8AD
.
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 latin1, která nemá hodnoty pro perské znaky, takže je nahradily otazníky.
Lék (pro budoucí `INSERTy):
- Překódujte svou aplikaci pomocí rozhraní mysqli_* namísto zastaralého rozhraní mysql_*.
- data kódovaná utf8 (dobrá)
- mysqli_set_charset('utf8')
- 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í.
Pokud chcete, aby se s nimi zacházelo stejně:'بِسْمِ' ='بسم', použijte utf8_unicode_ci (místo utf8_general_ci) pro COLLATION
.