PDO:: __ construct(): сервер отправил charset (255), неизвестный клиенту. Пожалуйста, сообщите разработчикам

Я пытаюсь подключиться к базе данных MySQL из приложения Symfony 3. Но при попытке создать MySQL-схему из командной консоли Symfony я получаю эту ошибку: PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

Оба PHP и MySQL работают в контейнерах Docker.

Версия MySQL: 8.0.1

Версия PHP: 7.1.3

Драйвер: pdo_mysql

charset: UTF8

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

Любые идеи?

Ответ 1

MySQL 8 изменил кодировку по умолчанию на utfmb4. Но некоторые клиенты не знают эту кодировку. Следовательно, когда сервер сообщает клиенту свою кодировку по умолчанию, а клиент не знает, что означает сервер, он выдает эту ошибку.

Смотрите также https://bugs.mysql.com/bug.php?id=71606

Эта ошибка связана с MySQL Connector/C++, поэтому она затрагивает не только PHP.

Хорошо, я заставил его работать, изменив набор символов на utf8, чтобы он был совместим с не обновленными клиентами. Я добавил это в /etc/my.cnf и перезапустил mysqld:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

Я нашел эти настройки в ответе от 2010 года: Изменить набор символов MySQL по умолчанию на UTF-8 в my.cnf?

Ответ 2

Принятый ответ спас меня (спасибо, Билл !!!), но я столкнулся с еще одной связанной проблемой, просто хотел рассказать о моем опыте -

После обновления до MySQL 8.0.11 у меня возникла та же проблема, что и при использовании функции PHP mysqli_connect(). В моем каталоге MySQL (в моем случае, usr/local/mysql) я создал файл my.cnf, добавил содержимое в принятый ответ, а затем перезапустил сервер MySQL. Однако это привело к новой ошибке:

mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]

Я добавил строку default_authentication_plugin = mysql_native_password, поэтому my.cnf теперь выглядело так:

[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

и мне было хорошо идти!

Для дополнительной справки: https://github.com/laradock/laradock/issues/1392

Ответ 3

Работает для меня>

окружающая среда:

localhost
Windows 10
PHP 5.6.31
MYSQL 8

задавать:

default-character-set=utf8

на:

c:\programdata\mysql\mysql server 8.0\my.ini

  • Не работает на> C:\Program Files\MySQL\MySQL Server 5.5\my.ini

Инструменты, которые помогают:

C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p

mysql> show variables like 'char%';

mysql> show variables like 'collation%';

\m/

Ответ 4

Я столкнулся с той же проблемой, поэтому я переустановил MySQL 8 с другим методом аутентификации "Использовать устаревший метод аутентификации (сохранить совместимость с MySQL 5.x)", а затем работал правильно.

Во время установки выберите второй метод аутентификации.

Удачи!

Ответ 5

найдите раздел [MySQLi] в вашем php.ini и добавьте строку mysqli.default_charset = "UTF-8". Подобные изменения могут потребоваться для секции [Pdo_mysql] и [mysqlnd].

Проблема, по-видимому, связана именно с MySQL версии 8.0, и выше было обнаружено, что решение работает с PHP версии 7.2, а решение не работает с PHP 7.0

Ответ 6

Я решил эту проблему, добавив следующий код в мой файл /etc/my.cnf -

enter image description here

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

После сохранения я зашел в настройки системы, остановил сервер MYSQL и снова запустился, и все заработало.

Ответ 7

У меня была такая же проблема для подключения к локальной системе.

Я проверил в списке служб (Run-> Службы. msc-> Ввод) wampmysqld64 был остановлен.

Перезапустил это. и смог войти.