Наистина ли все още използвате PHP>=версия 3.6 и <5.3.6?
Ако приемем, че имате 5.3.6 или по-нова...
Набори от знаци и PDO_MYSQL DSN кажете, че трябва да използвате
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
И предполага (не достатъчно ясно), че utf8
трябва да се замени с utf8mb4
ако е подходящо.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
не е толкова добър, но беше алтернативата преди 5.3.6.
Мисля, че „опасно“ е твърде силна дума, дори преди 5.3.6.
Свързана техника:Използване на init_command = SET NAMES ...
в my.cnf
е лошо защото init_command
не се изпълнява при свързване като root
.
utf8mb4
е предпочитаният CHARACTER SET
за UTF-8, тъй като включва Emoji и някои китайски знаци, които липсваха в utf8
. Този набор от знаци е наличен, започвайки с MySQL версия 5.5.3.