Stai davvero ancora usando PHP>=versione 3.6 e <5.3.6 ?
Supponendo che tu abbia 5.3.6 o versioni successive...
Set di caratteri e DSN PDO_MYSQL dì che dovresti usare
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
E implica (non abbastanza chiaramente) che utf8
dovrebbe essere sostituito da utf8mb4
se del caso.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
non è così buono, ma era l'alternativa prima della 5.3.6.
Penso che "pericoloso" sia una parola troppo forte, anche prima della 5.3.6.
Una tecnica correlata:usando init_command = SET NAMES ...
in my.cnf
è cattivo perché init_command
non viene eseguito quando ci si connette come root
.
utf8mb4
è il CHARACTER SET
preferito per UTF-8 perché include Emoji e alcuni caratteri cinesi mancanti da utf8
. Quel set di caratteri è disponibile a partire da MySQL versione 5.5.3.