Rumah > Soal Jawab > teks badan
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(): 服务器发送了客户端未知的字符集 (255)。请向开发者报告
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?
P粉3646420192023-10-17 09:06:36
Selepas menaik taraf kepada MySQL 8.0.11, saya menggunakan fail mysqli_connect()
函数时遇到了与OP相同的问题。在我的 MySQL 目录(在我的例子中,usr/local/mysql
)中,我创建了 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';
"
P粉8845486192023-10-17 00:27:36
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?