Saya cuba menyambung ke pangkalan data MySQL daripada aplikasi Symfony 3. Tetapi apabila cuba mencipta skema MySQL daripada arahan konsol Symfony, saya mendapat ralat ini: PDO::__construct(): 服務器發(fā)送了客戶端未知的字符集 (255)。請向開發(fā)者報告
PHP dan MySQL kedua-duanya dijalankan dalam bekas Docker.
Versi MySQL: 8.0.1
Versi PHP: 7.1.3
Pemandu:pdo_mysql
Set watak:UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
Ada idea?
Selepas menaik taraf kepada MySQL 8.0.11, saya menggunakan fail mysqli_connect()
函數時遇到了與OP相同的問題。在我的 MySQL 目錄(在我的例子中,usr/local/mysql
)中,我創(chuàng)建了 my.cnf
PHP, menambah kandungan daripada jawapan yang diterima dan memulakan semula pelayan MySQL. Walau bagaimanapun, ini menghasilkan ralat baharu:
mysqli_connect():服務器請求客戶端未知的身份驗證方法 [caching_sha2_password]
Saya menambah baris default_authentication_plugin = mysql_native_password
,所以 my.cnf
dan kini kelihatan seperti:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8 default_authentication_plugin = mysql_native_password
Saya sangat teruja untuk pergi!
Lagi rujukan: https://github.com/laradock/laradock/issues/1392
Sila ambil perhatian komen ARA1307:
"Sila ambil perhatian bahawa anda harus membuat pengguna baharu dan nyatakan secara eksplisit "IDENTIFIED WITH mysql_native_password", dan menukar pengguna sedia ada, sebagai contoh: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
"
MySQL 8 menukar set aksara lalai kepada utf8mb4. Tetapi sesetengah pelanggan tidak tahu set watak ini. Jadi ralat ini dilemparkan apabila pelayan melaporkan set aksara lalainya kepada klien dan klien tidak tahu maksud pelayan.
Lihat juga https://bugs.mysql.com/bug.php?id= 71606
Pepijat ini khusus untuk MySQL Connector/C++, jadi ia menjejaskan lebih daripada PHP sahaja.
Penyelesaian yang betul adalah untuk menaik taraf pelanggan , tetapi sementara itu saya berjaya dengan menukar charset pelayan kepada utf8 agar serasi dengan pelanggan yang tidak dinaik taraf. Saya menambahkannya pada /etc/my.cnf dan memulakan semula mysqld:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
Saya menemui tetapan ini dalam jawapan ini dari 2010: Tukar set aksara lalai MySQL dalam my.cnf kepada UTF-8?