Наистина ли все още използвате PHP>=версия 3.6 и <5.3.6?
Ако приемем, че имате 5.3.6 или по-нова...
Набори от знаци и PDO_MYSQL DSN кажете, че трябва да използвате
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
И предполага (не достатъчно ясно), че utf8 трябва да се замени с utf8mb4 ако е подходящо.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' не е толкова добър, но беше алтернативата преди 5.3.6.
Мисля, че „опасно“ е твърде силна дума, дори преди 5.3.6.
Свързана техника:Използване на init_command = SET NAMES ... в my.cnf е лошо защото init_command не се изпълнява при свързване като root .
utf8mb4 е предпочитаният CHARACTER SET за UTF-8, тъй като включва Emoji и някои китайски знаци, които липсваха в utf8 . Този набор от знаци е наличен, започвайки с MySQL версия 5.5.3.