Här är ett två i ett svar.
Du kan ställa in detta i DSN eller som MYSQL_ATTR_INIT_COMMAND (anslutningsalternativ).
DSN är bättre, tycker jag.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Om du anger UTF-8
du arbetar med standardsorteringen av utf8_general_ci
, om inte din db-tabell eller fält använder något annat.
Om du vill att hela servern ska svara med denna standardsortering, använd då konfigurationsdirektiv:
collation_server=utf8_unicode_ci
character_set_server=utf8
Så du behöver inte ange det vid anslutning varje gång.
Kollationerna påverkar sorteringen av tecken och ställs in på tabellen och fälten i din databas. Dessa inställningar respekteras när du frågar tabellen. Se till att de är inställda. Använd UTF-8-namn med sorteringsuppsättningen i din db.
Din kommentar:
Låt oss citera från MySQL-manualen för att bevisa detta:
Mitt svar:Det fungerar implicit, om inte dina tabeller ändrar detta uttryckligen.
Fråga från kommentar:
Exempel:Kolumnsortering åsidosätter tabellsortering
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Om både teckenuppsättning X och SAMMANSTÄLLNING Y anges i en kolumn, används teckenuppsättning X och sortering Y. Kolumnen har teckenuppsättningen utf8
och sortering utf8_unicode_ci
som anges i tabellkolumnen, medan tabellen är i latin1 + latin1_bin.
Exempel:i allmänhet används tabellsortering
Om sortering inte uttryckligen anges i en kolumn/fält, används tabellsorteringen:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
kol1 har sortering latin1_bin.
Om du vill ha utf8_unicode_ci
sortering, ställ in den till dina tabeller i allmänhet eller till kolumnerna/fälten.