sql >> Databáze >  >> RDS >> Mysql

Uložené neanglické znaky, má '?????' - Problém se znakovou sadou MySQL

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




  1. Existuje PL/SQL pragma podobné DETERMINISTIC, ale pro rozsah jediného SQL SELECT?

  2. SQL Server 2016:Zálohování databáze

  3. Funkce LN() v Oracle

  4. aktualizovat data v div