mysql php の文字化けの問題を解決するには: 1. データベース テーブル作成時にデータベース テーブルの文字セットを指定します; 2. mysql の文字セットを設定します; 3. データベースに接続した後、データベース間で文字を送信するときに使用されるデフォルトの文字エンコーディング ;4. HTML ページで使用される文字セットを設定します。
php が mysql を読み込むとき、次の場所で文字セットが関係します。
1. データベース テーブルを作成するときに、データベース テーブルの文字セットを指定します。たとえば、
create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )DEFAULT CHARSET =UTF8;
テーブルの作成時にテーブルのキャラクタ セットが指定されていない場合は、テーブルが属するデータベースのデフォルトのキャラクタ セットが使用されます。文字セットはcharacter_set_databaseで指定します。
データベース テーブルで使用されている文字セットを確認する方法は次のとおりです:
show create table mytable;
(追記: データベース/テーブルを構築してデータベース操作を実行するときは、文字セットに依存するのではなく、使用される文字セットを明示的に示すようにしてください。 MySQL のデフォルト設定、そうでない場合、MySQL はアップグレード時に大きな問題を引き起こす可能性があります [1])
2. Mysql 文字セット
mysql には、character_set_client、character_set_results、およびcharacter_set_connection という 3 つの重要な変数があります。
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 は、次の 3 つの文と同等です
SETcharacter_set_client = utf8;
SETcharacter_set_results = utf8;
SETcharacter_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
は正常に中国語の挿入と読み込みができるが、mysqlでは文字化けが表示される
(2) データベーステーブルの文字セットは utf8 です。中国語を正常に挿入および読み取るにはセット名 utf8
を使用すると、mysql での表示は正しくなります
(3) 文字セットは utf8データベース テーブルは utf8 ではありません。セット名 utf8
mysql を使用してください。表示では、読み取り値はすべて疑問符です。
多くの関連知識については、PHP 中国語 Web サイト をご覧ください。
以上がmysql php文字化け問題のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。