Você ainda está usando PHP>=versão 3.6 e <5.3.6 ?
Supondo que você tenha 5.3.6 ou posterior ...
Conjuntos de caracteres e PDO_MYSQL DSN dizer que você deve usar
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
E implica (não com clareza suficiente) que
utf8
deve ser substituído por utf8mb4
se apropriado. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
não é tão bom, mas era a alternativa antes de 5.3.6. Eu acho que "perigoso" é uma palavra muito forte, mesmo antes do 5.3.6.
Uma técnica relacionada:Usando
init_command = SET NAMES ...
em my.cnf
é ruim porque init_command
não é executado ao conectar como root
. utf8mb4
é o CHARACTER SET
preferido para UTF-8 porque inclui Emoji e alguns caracteres chineses que estavam faltando em utf8
. Esse conjunto de caracteres está disponível a partir do MySQL versão 5.5.3.