Estoy tratando de conectarme a una base de datos MySQL desde la aplicación Symfony 3. Pero cuando intento crear un esquema MySQL desde un comando de la consola Symfony, aparece este error: PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
Tanto PHP como MySQL se ejecutan en contenedores Docker.
Versión de MySQL: 8.0.1
Versión PHP: 7.1.3
Controlador: pdo_mysql
juego de caracteres: UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
¿Algunas ideas?
MySQL 8 cambió el conjunto de caracteres predeterminado a utf8mb4. Pero algunos clientes no conocen este conjunto de caracteres. Por lo tanto, cuando el servidor informa su conjunto de caracteres predeterminado al cliente y el cliente no sabe qué significa el servidor, arroja este error.
Consulte también https://bugs.mysql.com/bug.php?id=71606
Ese error está en contra de MySQL Connector/C++ por lo que está afectando más que solo PHP.
De acuerdo, lo hice funcionar cambiando el juego de caracteres a utf8, para que sea compatible con clientes no actualizados. Agregué 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 = utf8Encontré esta configuración en una respuesta de 2010: ¿Cambiar el conjunto de caracteres predeterminado de MySQL a UTF-8 en my.cnf?
La respuesta aceptada me salvó (¡gracias, Bill!), pero me encontré con otro problema relacionado, solo quería brindar 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 , agregué el contenido en la respuesta aceptada y luego reinicié el servidor MySQL. Sin embargo, esto produjo un nuevo error:
mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
Agregué la línea default_authentication_plugin = mysql_native_password , por lo que my.cnf ahora se veía así:
[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_passwordy yo estaba bueno para ir!
Para referencia adicional: https://github.com/laradock/laradock/issues/1392
Mi caso fue que estaba usando RDS (MySQL db verion 8) de AWS y estaba conectando mi aplicación a través de EC2 (mi código php 5.6 estaba en EC2).
Aquí, en este caso, dado que es RDS, no hay my.cnf, los parámetros son mantenidos por PARAMETER Group of AWS. Consulte: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
Entonces lo que hice fue:
Creó un nuevo grupo de parámetros y luego los editó.
Buscó todos los parámetros del conjunto de caracteres. Estos están en blanco por defecto. edítelos individualmente y seleccione utf8 de la lista desplegable.
cliente_juego_de_caracteres, conexión_juego_de_caracteres, base_de_datos_de_juego_de_caracteres, servidor_de_juego_de_caracteres
Y luego, lo más importante, instancia de RDS reiniciada.
Esto resolvió mi problema y la conexión de php5.6 a mysql 8.x funcionó muy bien.
Por favor, vea esta imagen para una mejor comprensión.
