Czy naprawdę nadal używasz PHP>=w wersji 3.6 i <5.3.6?
Zakładając, że masz wersję 5.3.6 lub nowszą...
Zestawy znaków i PDO_MYSQL DSN powiedz, że powinieneś użyć
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
I sugeruje (nie dość jasno), że utf8 powinien zostać zastąpiony przez utf8mb4 w razie potrzeby.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' nie jest tak dobry, ale był alternatywą przed 5.3.6.
Myślę, że „niebezpieczne” to zbyt mocne słowo, nawet przed 5.3.6.
Powiązana technika:Używanie init_command = SET NAMES ... w my.cnf jest zły ponieważ init_command nie jest wykonywane podczas łączenia jako root .
utf8mb4 jest preferowanym CHARACTER SET dla UTF-8, ponieważ zawiera Emoji i niektóre chińskie znaki, których brakowało w utf8 . Ten zestaw znaków jest dostępny od wersji MySQL 5.5.3.