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 был остановлен.
Перезапустил это. и смог войти.