W grę wchodzą dwa różne zestawy znaków:
- kodowanie, w którym MySQL zakłada, że łańcuchy są wysyłane przez klienta (
character_set_client
); i - kodowanie, w którym MySQL będzie wysyłać swoje odpowiedzi (
character_set_results
).
Aby ustalić aktualną wartość tych zmiennych za pomocą PDO, możesz pobrać wyniki odpowiedniego SHOW VARIABLES
oświadczenie; na przykład:
$qry = $db->query("SHOW VARIABLES LIKE 'character_set_client'");
Dokumentacja mysql_client_encoding()
jest nieco niejednoznaczny, ponieważ stwierdza:
Jednak taka zmienna systemowa serwera nie istnieje:więc nie jestem pewien, która by zwróciła.
Wreszcie, zamiast ustawiać MYSQL_ATTR_INIT_COMMAND
, możesz określić żądany zestaw znaków w DSN (jak wspomniano w instrukcja
):
$db = new PDO("mysql:dbname=$db;host=$host;charset=$charset", $user, $password);