Sila laporkan kepada pembangun: PDO::__construct(): Set aksara yang dihantar pelayan (255) tidak dikenali oleh klien
P粉808697471
P粉808697471 2023-10-16 10:02:44
0
2
554

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粉808697471
P粉808697471

membalas semua(2)
P粉364642019

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粉884548619

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?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!