web-dev-qa-db-ja.com

PDO :: __ construct():サーバーはクライアントに不明な文字セット(255)を送信しました。開発者に報告してください

Symfony 3アプリケーションからMySQLデータベースに接続しようとしています。しかし、SymfonyコンソールコマンドからMySQLスキーマを作成しようとすると、次のエラーが表示されます: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

文字セット:UTF8

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

何か案は?

27
Napas

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年の回答でこれらの設定を見つけました。 my.cnfでMySQLのデフォルト文字セットをUTF-8に変更しますか?

63
Bill Karwin

受け入れられた答えは私を助けてくれました(ビル、ありがとう!!!)

MySQL 8.0.11にアップグレードした後、PHPのmysqli_connect()関数を使用すると、OPと同じ問題が発生しました。 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

16
skwidbreth

私のために働く>

環境:

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
reyqueson

私は同じ問題に直面していたので、異なる認証方法で「MySQL 8を再インストールし、「レガシー認証方法を使用する(MySQL 5.x互換性を保持する)」と正しく動作します。

インストール中に2番目の認証方法を選択します。

幸運を!

1
npsingh

[MySQLi]でセクションphp.iniを見つけ、mysqli.default_charset = "UTF-8"行を追加します。セクション[Pdo_mysql]および[mysqlnd]に必要な同様の変更。

問題は特にMySQLバージョン8.0にあるようで、上記のソリューションはPHPバージョン7.2で機能し、PHP 7.0では機能しませんでした。

0
user7154703

次のコードをmy/ 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サーバーを停止し、再び起動して、動作しました。

0
hardik chugh