Ecco una risposta due in uno.
Puoi impostarlo nel DSN o come MYSQL_ATTR_INIT_COMMAND (opzioni di connessione).
DSN è meglio, credo.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Se specifichi UTF-8
stai lavorando con le regole di confronto predefinite di utf8_general_ci
, a meno che la tabella o il campo db non utilizzi qualcosa di diverso.
Se vuoi che l'intero server risponda con queste regole di confronto predefinite, usa le direttive di configurazione:
collation_server=utf8_unicode_ci
character_set_server=utf8
Quindi non devi specificarlo in connessione ogni volta.
Le regole di confronto influiscono sull'ordinamento dei caratteri e vengono impostate sulla tabella e sui campi del database. Queste impostazioni vengono rispettate quando si interroga la tabella. Assicurati che siano impostati. Usa nomi UTF-8 con le regole di confronto impostate nel tuo db.
Il tuo commento:
Citiamo dal Manuale MySQL per provarlo:
La mia risposta:Funziona in modo implicito, a meno che le tue tabelle non lo modifichino esplicitamente.
Domanda dal commento:
Esempio:le regole di confronto delle colonne sostituiscono quelle delle tabelle
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Se su una colonna sono specificati sia CHARACTER SET X che COLLATE Y, vengono utilizzati il set di caratteri X e la collation Y. La colonna ha il set di caratteri utf8
e confronto utf8_unicode_ci
come specificato nella colonna della tabella, mentre la tabella è in latin1 + latin1_bin.
Esempio:in generale vengono utilizzate le regole di confronto delle tabelle
Se le regole di confronto non sono specificate in modo esplicito su una colonna/campo, vengono utilizzate le regole di confronto della tabella:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 ha regole di confronto latin1_bin.
Se vuoi utf8_unicode_ci
confronto, impostalo sulle tue tabelle in generale o sulle colonne/campi.