Š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 latin1byl 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 .