Apakah Anda benar-benar masih menggunakan PHP>=versi 3.6 dan <5.3.6 ?
Dengan asumsi Anda memiliki 5.3.6 atau lebih baru...
Kumpulan karakter dan PDO_MYSQL DSN katakan bahwa Anda harus menggunakan
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Dan menyiratkan (tidak cukup jelas) bahwa utf8
harus diganti dengan utf8mb4
jika sesuai.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
tidak sebaik, tetapi merupakan alternatif sebelum 5.3.6.
Saya pikir "berbahaya" adalah kata yang terlalu kuat, bahkan sebelum-5.3.6.
Teknik terkait:Menggunakan init_command = SET NAMES ...
di my.cnf
buruk karena init_command
tidak dieksekusi saat menghubungkan sebagai root
.
utf8mb4
adalah CHARACTER SET
yang disukai untuk UTF-8 karena menyertakan Emoji dan beberapa karakter Cina yang hilang dari utf8
. Rangkaian karakter tersebut tersedia mulai dari MySQL versi 5.5.3.