PHP 非互換性の解決策: 1. 「my.cnf」を変更して文字セットを指定します; 2. 「alter user 'root'@'%'identified with...」アカウントを通じて既存の文字セットを更新します。パスワード; 3. Mysql8.0 を再インストールします。
この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター。
PHP と Mysql8 間の非互換性問題の概要
Mysql8.0 をインストールした後、元の PHP と連携する必要がありますが、元々は動作可能でした。 Mysql5.1 ではうまく動作していたコードが突然エラーを報告し、追加の作業を行う必要があるようです。
报错:PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
ネット情報によると、Mysql8.0ではデフォルトの文字セットがutfmb4に変更されたため、PHPに限らずクライアントとの通信が認識できなくなったため、文字を指定するにはmy.cnfを変更する必要があります。セット。
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8 报错:PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]
オンライン情報によると、これはユーザー ID 認証の暗号化方式の非互換性が原因であるとのことです。mysql8.0 のデフォルト方式は caching_sha2_password であり、これにより古いバージョンとの互換性の問題が発生します。古いバージョンは mysql_native_password です。
推奨: 「PHP ビデオ チュートリアル 」
設定する暗号化方式を指定できます:
# 新建用户,使用旧版加密方式设置密码 CREATE USER username@localhost identified with mysql_native_password by 'password'; # 更新已存在的账号密码加密方式 alter user 'root'@'%' identified with mysql_native_password by 'password';
ただし、より良い方法は、行を追加することです。デフォルト設定の :
[mysqld] default_authentication_plugin = mysql_native_password 报错:Access denied for user 'root'@'localhost' (using password: YES) mysql> GRANT ALL PRIVILEGES ON *.* TO 'oss'@'%'; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
他のユーザーに権限を追加すると、権限がないというエラーが表示されました。その理由は、誤って root ユーザーを削除したためです。この問題を解決するためのドキュメントはインターネット上にたくさんありますが、 、再構築後 root ユーザーに Grant_priv: Y があるにもかかわらず、権限を正常に割り当てることができず、頭が痛くなります。
解決策: 再インストールします。記事を参照して Mysql8.0 をインストールします。
まとめ
mysql8.0 の新機能は何ですか? ドキュメントを詳しく確認したわけではありませんが、最初は互換性に苦労しましたが、幸いにも問題は解決しました。これら 3 つの質問の後、PHP プログラムは正常に実行されました。これから PHP5.1 を PHP7 にアップグレードします。
以上がPHPの非互換性の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。