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

dziwne kodowanie znaków przechowywanych danych, stary skrypt pokazuje je dobrze, nowy nie

Krótko mówiąc, ponieważ omawiano to już tysiąc razy:

  1. PHP przechowuje ciąg, powiedzmy "漢字" , zakodowane w UTF-8. Bajty do tego to E6 BC A2 E5 AD 97 .
  2. Wysyła ten ciąg przez połączenie z bazą danych, które jest ustawione na latin1 .
  3. Baza danych otrzymuje bajty E6 BC A2 E5 AD 97 , myśląc, że reprezentują one latin1 znaków.
  4. Baza danych przechowuje znaki æ¼¢å­ (znaki, które E6 BC A2 E5 AD 97 mapuje w latin1 ).
  5. Ten sam odwrócony proces powoduje, że PHP otrzymuje te same bajty, które następnie traktuje jako UTF-8. Roundtrip działa dobrze w PHP, nawet jeśli baza danych nie traktuje znaków tak, jak powinna.

Problem polegał na tym, że połączenie z bazą danych zostało ustawione niepoprawnie podczas wprowadzania danych do bazy danych. Będziesz musiał przekonwertować dane w bazie danych na prawidłowe znaki. Spróbuj tego:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Może utf8 nie jest tym, czego potrzebujesz, eksperymentuj. Jeśli to zadziała, zmień to na UPDATE oświadczenie o stałej aktualizacji danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ostrzeżenie:PDO::__construct():[2002] Brak takiego pliku lub katalogu (próba połączenia przez unix:///tmp/mysql.sock) w

  2. Jak wyświetlić wartości wierszy jako kolumny w MySQL?

  3. Jak wykonać kopię zapasową / wyeksportować bazę danych MySQL za pomocą PHP

  4. PDO MySQL:Wstaw wiele wierszy w jednym zapytaniu

  5. Jak przyciąć tabelę w MySQL