Symfony 3 アプリケーションから MySQL データベースに接続しようとしています。しかし、Symfony コンソール コマンドから MySQL スキーマを作成しようとすると、次のエラーが発生します: PDO::__construct(): サーバーはクライアントに不明な文字セット (255) を送信しました。開発者に報告してください
PHP と MySQL はどちらも Docker コンテナ内で実行されます。
MySQL バージョン: 8.0.1
PHP バージョン: 7.1.3
ドライバー: pdo_mysql
文字セット: UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
MySQL 8.0.11 にアップグレードした後、PHP の
mysqli_connect()
関数を使用するときに OP と同じ問題が発生しました。 MySQL ディレクトリ (私の場合、usr/local/mysql
) でmy.cnf
ファイルを作成し、承認された回答の内容を追加して、MySQL サーバーを再起動しました。 。ただし、これにより新しいエラーが発生しました:mysqli_connect(): サーバーはクライアントに知られていない認証方法を要求しました [caching_sha2_password]
行
リーリーdefault_authentication_plugin = mysql_native_password
を追加したため、my.cnf
は次のようになります:行くのがとても楽しみです!
その他の参考資料:https://github.com/laradock/laradock/issues/1392
ARA1307 のコメントに注意してください:
「新しいユーザーを作成し、「IDENTIFIED WITH mysql_native_password」を明示的に指定し、既存のユーザーを変更する必要があることに注意してください。例:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
”MySQL 8 では、デフォルトの文字セットが utf8mb4 に変更されます。しかし、顧客の中にはこの文字セットを知らない人もいます。したがって、このエラーは、サーバーがデフォルトの文字セットをクライアントに報告し、クライアントがサーバーの意味を知らない場合にスローされます。
関連項目https://bugs.mysql.com/bug.php?id= 71606
このバグは MySQL Connector/C に固有のものであるため、PHP 以外にも影響します。
正しい解決策はクライアントをアップグレードすることですですが、それまでは、アップグレードされていないクライアントと互換性を持たせるためにサーバーの文字セットを utf8 に変更することで動作するようにしました。これを /etc/my.cnf に追加し、mysqld を再起動しました:
リーリーこの 2010 年の回答で次の設定を見つけました: my.cnf の MySQL のデフォルトの文字セットを UTF-8 に変更しますか?