Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapisane znaki inne niż angielskie, otrzymały „?????” - Problem z zestawem znaków MySQL

Złe wieści. Ale najpierw sprawdź dokładnie:

SELECT col, HEX(col)...

aby zobaczyć, co jest w tabeli. Jeśli w kodzie szesnastkowym jest 3F , to dane znikają. Prawidłowo przechowywany dal znak powinien być szesnastkowy D8AF; hah to szesnastkowy D8AD .

Co się stało:

  • miałeś dane zakodowane w utf8 (dobre)
  • SET NAMES latin1 obowiązywał (domyślnie, ale źle)
  • kolumna została zadeklarowana CHARACTER SET latin1 (domyślnie, ale źle)

Podczas INSERTed dane zostały przekonwertowane na latin1, który nie ma wartości dla znaków farsi, więc zastąpiły je znaki zapytania.

Lekarstwo (na przyszłe `INSERTY):

  • Przekoduj swoją aplikację przy użyciu interfejsu mysqli_* zamiast przestarzałego interfejsu mysql_*.
  • dane zakodowane w formacie utf8 (dobre)
  • mysqli_set_charset('utf8')
  • sprawdź, czy domyślne kolumny i/lub tabela to CHARACTER SET utf8
  • Jeśli wyświetlasz na stronie internetowej, <meta...utf8> powinien znajdować się blisko góry.

Powyższa dyskusja dotyczy CHARACTER SET , kodowanie znaków. A teraz wskazówka na temat COLLATION , który służy do porównywania i sortowania.

Jeśli chcesz, aby były traktowane jako równe:'بِسْمِ' ='بسم', użyj utf8_unicode_ci (zamiast utf8_general_ci) dla COLLATION .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd importowania danych SOLR nie można wykonać zapytania

  2. Jak zabezpieczyć MySQL:część druga

  3. parsowanie zapytań wyszukiwania pełnotekstowego wpisanych przez użytkownika do klauzuli WHERE MySQL przy użyciu PHP

  4. Prawdziwy łańcuch ucieczki i PDO

  5. MySQL:Nieprawidłowa wartość domyślna dla TIMESTAMP