PDO::__construct(): Server mengirim charset (255) yang tidak diketahui oleh klien. Tolong, laporkan ke pengembang

Saya mencoba untuk terhubung ke database MySQL dari aplikasi Symfony 3. Tetapi ketika mencoba membuat skema MySQL dari perintah konsol Symfony, saya mendapatkan kesalahan ini: PDO::__construct(): Server mengirim charset (255) yang tidak diketahui oleh klien. Tolong, laporkan ke pengembang

Baik PHP dan MySQL berjalan dalam kontainer Docker.

Versi MySQL: 8.0.1

Versi PHP: 7.1.3

Pengemudi: pdo_mysql

charset: UTF8

dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"

Ada ide?

Larutan

MySQL 8 mengubah charset default ke utfmb4. Tetapi beberapa klien tidak mengetahui charset ini. Oleh karena itu, ketika server melaporkan charset default-nya ke klien, dan klien tidak tahu apa yang dimaksud server, maka server akan melempar kesalahan ini.

Lihat juga https://bugs.mysql.com/bug.php?id=71606

Bug itu bertentangan dengan Konektor MySQL/C++ sehingga tidak hanya mempengaruhi PHP.

Oke-saya membuatnya berfungsi dengan mengubah set karakter ke utf8, agar kompatibel dengan klien yang tidak di-upgrade. Saya menambahkan ini ke /etc/my.cnf dan memulai ulang mysqld:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

Saya menemukan pengaturan ini dalam jawaban dari tahun 2010: https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf

Komentar (7)

Jawaban yang diterima menyelamatkan saya (terima kasih, Bill!!!), tetapi saya mengalami masalah lain yang terkait, hanya ingin memberikan beberapa rincian tentang pengalaman saya -

Setelah meng-upgrade ke MySQL 8.0.11, saya mengalami masalah yang sama dengan OP ketika menggunakan fungsi mysqli_connect() PHP. Dalam direktori MySQL saya (dalam kasus saya, usr/local/mysql), saya membuat file my.cnf, menambahkan konten dalam jawaban yang diterima, lalu memulai ulang server MySQL. Namun, ini menghasilkan kesalahan baru:

mysqli_connect(): Server meminta metode otentikasi yang tidak diketahui oleh klien [caching_sha2_password]

Saya menambahkan baris default_authentication_plugin = mysql_native_password, sehingga my.cnf sekarang tampak 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

dan saya sudah siap untuk pergi!

Untuk referensi tambahan: https://github.com/laradock/laradock/issues/1392

Komentar (3)

Saya memiliki masalah yang sama untuk terhubung ke sistem lokal.

Saya memeriksa di daftar layanan (Run->Services.msc->Enter) wampmysqld64 telah dihentikan.

Saya memulai ulang. dan bisa login.

Komentar (0)