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;"
何か案は?
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に変更しますか?
受け入れられた答えは私を助けてくれました(ビル、ありがとう!!!)
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
行って良かった!
私のために働く>
環境:
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/
私は同じ問題に直面していたので、異なる認証方法で「MySQL 8を再インストールし、「レガシー認証方法を使用する(MySQL 5.x互換性を保持する)」と正しく動作します。
インストール中に2番目の認証方法を選択します。
幸運を!
[MySQLi]
でセクションphp.ini
を見つけ、mysqli.default_charset = "UTF-8"
行を追加します。セクション[Pdo_mysql]
および[mysqlnd]
に必要な同様の変更。
問題は特にMySQLバージョン8.0にあるようで、上記のソリューションはPHPバージョン7.2で機能し、PHP 7.0では機能しませんでした。