php が MySQL から文字化けを読み取る場合の解決策: 1. データベース テーブル作成時にデータベース テーブルの文字セットを指定する; 2. MySQL の文字セットを設定する; 3. 送信時に使用するデフォルトの文字エンコーディングを設定するデータベース間の文字; 4. 、HTML ページで使用される文字セットを設定します; 5. php テキスト ファイルで使用される文字セットを設定します。
この記事の動作環境:Windows7システム、PHP7.1バージョン、DELL G3コンピュータ
問題の概要php が mysql を読み込むと文字化けする
php が mysql を読み込むとき、次の場所で文字セットが関係します。
1. データベーステーブルの作成時に、データベーステーブルの文字セットを指定します。たとえば、
1 create table tablename 2 ( 3 id int not null auto_increment, 4 title varchar(20) not null, 5 primary key ('id') 6 )DEFAULT CHARSET =UTF8;
テーブルの作成時にテーブルのキャラクタ セットが指定されていない場合は、テーブルが属するデータベースのデフォルトのキャラクタ セットが使用されます。文字セットはcharacter_set_databaseで指定します。
データベース テーブルで使用されている文字セットを確認する方法は次のとおりです:
show create table mytable;
(追記: データベース/テーブルを構築してデータベース操作を実行するときは、使用されている文字セットを明示的に指定するようにしてください) MySQL のデフォルト設定に頼るのではなく、MySQL をアップグレードするときに多くの問題が発生する可能性があります [1])
2. Mysql 文字セット
mysql には 3 つの重要な変数があります。 Character_set_client、character_set_results、character_set_connection 。
character_set_client を設定することで、PHP がデータベースに保存するエンコード方式を Mysql に伝えます。
character_set_results を設定することで、PHP がどのような種類のエンコードされたデータを取得する必要があるかを Mysql に伝えます。
character_set_connection を設定することで、PHP クエリ内のテキストにどのエンコーディングを使用するかを Mysql に指示します。
3. データベースに接続した後、データベース間で文字を送信するときに使用するデフォルトの文字エンコーディングを設定します。
mysqli::set_charset() または mysqli::query('set names utf8') を使用して設定します。
「SET NAMES」の代わりに mysqli::set_charset(mysqli:set_charset) を使用してみてください (この記事を参照してください)
$db = new mysqli('localhost','user','passwd','database_name'); $db->set_charset('utf8');
これは utf-8 ではなく utf8 であることに注意してください
(ここでの問題は、データベースと PHP のエンコーディングが統一されているのですが、mysqli::set_charset() 関数が呼び出されない場合、データを読み取るときに文字化けが発生することです。これはなぜですか?)
(另,set names utf8相当于下面三句 SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; )
4. HTML ページで使用される文字セット。メタタグに
<meta http-equiv="content-type" content="text/html; charset=utf-8">
5 を設定します。php テキスト ファイルで使用される文字セットです。
vim を使用して Linux でファイルを開くことができます。
:set encoding
と入力すると、ファイルで使用されている文字セットが表示されます。
ファイルが文字化けしていないことを確認するには、次のことが必要です。ファイル自体が HTML エンコーディングで指定されているようにエンコードされていることを確認するために、PHP は Mysql のエンコーディング (character_set_client およびcharacter_set_results を含む) を統一するように指示します。 mysqli:set_charset() 関数または「SET NAMES」も使用します。
「3」以降の質問に対して、データベースリンク後の文字セットを設定した場合と設定しなかった場合の結果をテストする例をいくつか書きました。テスト環境はUbuntu 12.04、MySQL 5.5、php 5.5.7。
結果は以下の通りです:
(1) データベーステーブルの文字セットはutf8ですが、セット名utf8
を使わなくても中国語は正常に挿入、読み込み可能です。
(2) データベーステーブルの文字セットは utf8 です。セット名 utf8
を使用すると正常に中国語の挿入と読み取りができ、mysql の表示も正しくなります
(3) データベース テーブルの文字 セットは utf8 ではありません。セット名 utf8
を使用して mysql で表示すると、すべての単語が疑問符として読み取られます。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPがmysqlを読み込むと文字化けする場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。