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.