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

Znaki specjalne w PHP / MySQL

Chciałbym tylko podać więcej szczegółów na temat rozwiązania proponowanego przez vartec który jest (w zależności od instalacji MySQL) najbardziej poprawnym rozwiązaniem Twojego problemu. Przede wszystkim problem z zestawem znaków / kodowaniem w MySQL jest dość złożonym tematem, który jest szeroko omawiany w podręczniku MySQL Rozdział 9.1 „Obsługa zestawów znaków” . W twoim przypadku szczególnie 9.1.4. „Zestawy znaków połączenia i sortowanie” będzie najbardziej odpowiedni.

Krótko mówiąc:MySQL musi wiedzieć, jakiego zestawu znaków / kodowania oczekuje aplikacja kliencka (mówiąc z perspektywy bazy danych, czyli skryptu PHP), ponieważ transkoduje wszystkie dane ciągu znaków z wewnętrznego zestawu znaków / kodowania zdefiniowanego na serwerze, na poziomie bazy danych, tabeli lub kolumny do zestawu znaków połączenia / kodowania. Używasz UTF-8 po stronie klienta, więc musisz poinformować MySQL, że używasz UTF-8. Odbywa się to za pomocą polecenia MySQL SET NAMES 'utf8' które należy wysłać jako pierwsze zapytanie po otwarciu połączenia. W zależności od instalacji i biblioteki klienta MySQL, której używasz w skrypcie PHP, można to zrobić automatycznie przy każdym połączeniu.

Jeśli używasz PDO, wystarczy ustawić parametr konfiguracyjny

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Używanie mysqli do zmiany zestawu znaków / kodowania klienta jest jeszcze prostsze:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Mam nadzieję, że pomoże to uczynić całość bardziej zrozumiałą.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używaj relacyjnych baz danych MySQL w CentOS 5

  2. Jak zoptymalizować bazę danych witryny

  3. Pokaż (listę) bazy danych MySQL w systemie Linux za pomocą wiersza poleceń

  4. Błąd krytyczny:operator [] nie jest obsługiwany dla ciągów

  5. MySQL DISTINCT na GROUP_CONCAT()