Her er et to i ét svar.
Du kan indstille dette i DSN eller som MYSQL_ATTR_INIT_COMMAND (forbindelsesmuligheder).
DSN er bedre, synes jeg.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Hvis du angiver UTF-8
du arbejder med standardsorteringen af utf8_general_ci
, medmindre din db-tabel eller -felt bruger noget andet.
Hvis du ønsker, at hele serveren skal svare med denne standardsortering, skal du bruge konfigurationsdirektiver:
collation_server=utf8_unicode_ci
character_set_server=utf8
Så du behøver ikke at angive det ved forbindelse hver gang.
Samlingerne påvirker sorteringen af tegn og er indstillet på tabellen og felterne i din database. Disse indstillinger respekteres, når du forespørger i tabellen. Sørg for, at de er indstillet. Brug UTF-8-navne med sorteringssættet i din db.
Din kommentar:
Lad os citere fra MySQL-manualen for at bevise dette:
Mit svar:Det virker implicit, medmindre dine tabeller ændrer dette eksplicit.
Spørgsmål fra kommentar:
Eksempel:Kolonnesortering tilsidesætter tabelsortering
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Hvis både CHARACTER SET X og COLLATE Y er angivet i en kolonne, bruges tegnsæt X og sortering Y. Kolonnen har tegnsæt utf8
og sortering utf8_unicode_ci
som angivet i tabelkolonnen, mens tabellen er i latin1 + latin1_bin.
Eksempel:generelt bruges tabelsortering
Hvis sortering ikke er eksplicit angivet på en kolonne/felt, bruges tabelsorteringen:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 har sortering latin1_bin.
Hvis du vil have utf8_unicode_ci
sæt den til dine tabeller generelt eller til kolonnerne/felterne.