Bạn có thực sự vẫn đang sử dụng PHP> =phiên bản 3.6 và <5.3.6 không?
Giả sử bạn có 5.3.6 trở lên ...
Bộ ký tự và PDO_MYSQL DSN nói rằng bạn nên sử dụng
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Và ngụ ý (không đủ rõ ràng) rằng utf8 nên được thay thế bằng utf8mb4 nếu thích hợp.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' không tốt bằng, nhưng là giải pháp thay thế trước 5.3.6.
Tôi nghĩ rằng "nguy hiểm" là một từ quá mạnh, ngay cả trước 5.3.6.
Một kỹ thuật liên quan:Sử dụng init_command = SET NAMES ... trong my.cnf tệ lắm bởi vì init_command không được thực thi khi kết nối bằng root .
utf8mb4 là CHARACTER SET ưa thích cho UTF-8 vì nó bao gồm Biểu tượng cảm xúc và một số ký tự Trung Quốc bị thiếu trong utf8 . Bộ ký tự đó có sẵn bắt đầu với MySQL phiên bản 5.5.3.