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.