Använder du verkligen fortfarande PHP>=version 3.6 och <5.3.6 ?
Förutsatt att du har 5.3.6 eller senare...
Teckenuppsättningar och PDO_MYSQL DSN säg att du ska använda
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Och antyder (inte tillräckligt tydligt) att utf8
bör ersättas med utf8mb4
om det är lämpligt.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
är inte lika bra, men var alternativet före 5.3.6.
Jag tycker att "farlig" är ett för starkt ord, även före 5.3.6.
En relaterad teknik:Använda init_command = SET NAMES ...
i my.cnf
är dåligt eftersom init_command
exekveras inte vid anslutning som root
.
utf8mb4
är den föredragna CHARACTER SET
för UTF-8 eftersom det innehåller Emoji och några kinesiska tecken som saknades i utf8
. Den teckenuppsättningen är tillgänglig från och med MySQL version 5.5.3.