Oto odpowiedź dwa w jednym.
Możesz to ustawić w DSN lub jako MYSQL_ATTR_INIT_COMMAND (opcje połączenia).
Myślę, że DSN jest lepsze.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Jeśli określisz UTF-8
pracujesz z domyślnym sortowaniem utf8_general_ci
, chyba że Twoja tabela lub pole bazy danych używa czegoś innego.
Jeśli chcesz, aby cały serwer odpowiadał z tym domyślnym sortowaniem, użyj dyrektyw konfiguracyjnych:
collation_server=utf8_unicode_ci
character_set_server=utf8
Więc nie musisz za każdym razem określać tego przy połączeniu.
Sortowanie wpływa na sortowanie znaków i jest ustawiane w tabeli i polach w Twojej bazie danych. Te ustawienia są przestrzegane podczas wykonywania zapytań do tabeli. Upewnij się, że są ustawione.Użyj nazw UTF-8 z sortowaniem ustawionym w bazie danych.
Twój komentarz:
Przytoczmy cytat z podręcznika MySQL aby to udowodnić:
Moja odpowiedź:Działa domyślnie, chyba że Twoje tabele wyraźnie to zmienią.
Pytanie z komentarza:
Przykład:sortowanie kolumn zastępuje sortowanie tabeli
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Jeśli w kolumnie określono zarówno ZESTAW ZNAKÓW X, jak i UKŁADANIE Y, używany jest zestaw znaków X i sortowanie Y. Kolumna ma zestaw znaków utf8
i sortowanie utf8_unicode_ci
jak określono w kolumnie tabeli, podczas gdy tabela jest w latin1 + latin1_bin.
Przykład:ogólnie używane jest sortowanie tabeli
Jeśli sortowanie nie jest wyraźnie określone w kolumnie/polu, używane jest sortowanie tabeli:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 ma sortowanie latin1_bin.
Jeśli chcesz utf8_unicode_ci
sortowanie, ustaw je ogólnie na tabelach lub na kolumny/pola.