Bruger du virkelig stadig PHP>=version 3.6 og <5.3.6 ?
Forudsat at du har 5.3.6 eller nyere...
Tegnsæt og PDO_MYSQL DSN sige, at du skal bruge
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Og antyder (ikke tydeligt nok), at utf8
skal erstattes af utf8mb4
hvis det er relevant.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
er ikke så god, men var alternativet før 5.3.6.
Jeg synes "farlig" er et for stærkt ord, selv før 5.3.6.
En relateret teknik:Brug af init_command = SET NAMES ...
i my.cnf
er dårligt fordi init_command
udføres ikke, når der oprettes forbindelse som root
.
utf8mb4
er det foretrukne CHARACTER SET
for UTF-8, fordi den indeholder Emoji og nogle kinesiske tegn, der manglede i utf8
. Det tegnsæt er tilgængeligt fra MySQL version 5.5.3.