Verwenden Sie wirklich noch PHP>=Version 3.6 und <5.3.6 ?
Angenommen, Sie haben 5.3.6 oder höher...
Zeichensätze und PDO_MYSQL DSN sagen, dass Sie verwenden sollten
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Und impliziert (nicht deutlich genug), dass utf8 sollte durch utf8mb4 ersetzt werden ggf.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' ist nicht so gut, war aber die Alternative vor 5.3.6.
Ich denke, "gefährlich" ist ein zu starkes Wort, sogar vor 5.3.6.
Eine verwandte Technik:Verwendung von init_command = SET NAMES ... in my.cnf ist schlecht weil init_command wird beim Verbinden als root nicht ausgeführt .
utf8mb4 ist der bevorzugte CHARACTER SET für UTF-8, da es Emoji und einige chinesische Zeichen enthält, die in utf8 fehlten . Dieser Zeichensatz ist ab MySQL-Version 5.5.3 verfügbar.