¿Realmente sigues usando PHP>=versión 3.6 y <5.3.6 ?
Asumiendo que tienes 5.3.6 o posterior...
Conjuntos de caracteres y PDO_MYSQL DSN decir que deberías usar
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
E implica (no lo suficientemente claro) que utf8
debe ser reemplazado por utf8mb4
si corresponde.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
no es tan bueno, pero era la alternativa antes de 5.3.6.
Creo que "peligroso" es una palabra demasiado fuerte, incluso antes de 5.3.6.
Una técnica relacionada:Usar init_command = SET NAMES ...
en my.cnf
es malo porque init_command
no se ejecuta cuando se conecta como root
.
utf8mb4
es el CHARACTER SET
preferido para UTF-8 porque incluye emoji y algunos caracteres chinos que faltaban en utf8
. Ese juego de caracteres está disponible a partir de la versión 5.5.3 de MySQL.