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?
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
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