Zde je odpověď dva v jednom.
Můžete to nastavit v DSN nebo jako MYSQL_ATTR_INIT_COMMAND (možnosti připojení).
DSN je podle mě lepší.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Pokud zadáte UTF-8
pracujete s výchozím řazením utf8_general_ci
, pokud vaše db tabulka nebo pole nepoužívá něco jiného.
Pokud chcete, aby celý server odpověděl tímto výchozím řazením, použijte konfigurační direktivy:
collation_server=utf8_unicode_ci
character_set_server=utf8
Nemusíte jej tedy zadávat při připojení pokaždé.
Porovnání ovlivňuje řazení znaků a je nastaveno v tabulce a polích ve vaší databázi. Tato nastavení jsou respektována při dotazování na tabulku. Ujistěte se, že jsou nastaveny. Použijte názvy UTF-8 s nastavením řazení ve vaší databázi.
Váš komentář:
Pojďme citovat z příručky MySQL abych to dokázal:
Moje odpověď:Funguje to implicitně, pokud to vaše tabulky explicitně nezmění.
Otázka z komentáře:
Příklad:Řazení sloupců přepíše řazení tabulek
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Pokud je ve sloupci zadána ZNAKOVÁ SADA X i COLLATE Y, použije se znaková sada X a řazení Y. Sloupec má znakovou sadu utf8
a řazení utf8_unicode_ci
jak je uvedeno ve sloupci tabulky, zatímco tabulka je ve formátu latin1 + latin1_bin.
Příklad:Obecně se používá řazení tabulek
Pokud není řazení ve sloupci/poli výslovně uvedeno, použije se řazení tabulky:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 má řazení latin1_bin.
Pokud chcete utf8_unicode_ci
řazení, nastavte jej na vaše tabulky obecně nebo na sloupce/pole.