PDO::__construct(): El servidor envió un conjunto de caracteres (255) desconocido para el cliente. Por favor, informe a los desarrolladores

Estoy intentando conectarme a una base de datos MySQL desde una aplicación Symfony 3. Pero al intentar crear el esquema MySQL desde un comando de la consola de Symfony obtengo este error: PDO::__construct(): Server sent charset (255) unknown to the client. Por favor, informe a los desarrolladores.

Tanto PHP como MySQL se están ejecutando en contenedores Docker.

Versión de MySQL: 8.0.1

Versión de PHP: 7.1.3.

Controlador: pdo_mysql

conjunto de caracteres: UTF8

dsn: "mysql:host=mysql;dbname=base de datos;charset=UTF8;"

¿Alguna idea?

Solución

MySQL 8 cambió el conjunto de caracteres por defecto a utfmb4. Pero algunos clientes no conocen este conjunto de caracteres. Por lo tanto, cuando el servidor informa de su conjunto de caracteres por defecto al cliente, y el cliente no sabe lo que el servidor quiere decir, se produce este error.

Véase también https://bugs.mysql.com/bug.php?id=71606

Ese error es contra el Conector/C++ de MySQL, así que afecta más que sólo a PHP.

Vale, conseguí que funcionara cambiando el juego de caracteres a utf8, para ser compatible con clientes no actualizados. Añadí esto a /etc/my.cnf y reinicié mysqld:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

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

He encontrado esta configuración en una respuesta de 2010: https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf

Comentarios (7)

La respuesta aceptada me salvó (¡¡¡gracias, Bill!!!), pero me encontré con otro problema relacionado, sólo quería aportar algunos detalles sobre mi experiencia -

Después de actualizar a MySQL 8.0.11, experimenté el mismo problema que el OP al usar la función mysqli_connect() de PHP. En mi directorio MySQL (en mi caso, usr/local/mysql), creé el archivo my.cnf, añadí el contenido en la respuesta aceptada, y luego reinicié el servidor MySQL. Sin embargo, esto produjo un nuevo error:

mysqli_connect(): El servidor solicitó un método de autenticación desconocido para el cliente [caching_sha2_password].

Añadí la línea default_authentication_plugin = mysql_native_password, así que my.cnf ahora tenía este aspecto:

[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

y ¡listo!

Para referencias adicionales: https://github.com/laradock/laradock/issues/1392

Comentarios (3)

Tuve el mismo problema para conectarme al sistema local.

He comprobado en la lista de servicios (Run->Services.msc->Enter) wampmysqld64 fue detenido.

Lo reinicié y pude conectarme.

Comentarios (0)