ホームページ > バックエンド開発 > PHPチュートリアル > phpでmysqlを読み込む際のコード化け問題のまとめ

phpでmysqlを読み込む際のコード化け問題のまとめ

WBOY
リリース: 2016-07-25 09:13:29
オリジナル
851 人が閲覧しました

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;
コードをコピー
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) を使用してみてください PS: (この記事を参照)
    $db = new mysqli('localhost ' ,'user','passwd','database_name');

  1. $db->set_charset('utf8');
コードをコピーします
utf-8 ではなく utf8 であることに注意してください
(ここでの問題は、データベースと PHP のエンコーディングが統一されているのですが、mysqli::set_charset() 関数が呼び出されない場合、データを読み取るときに文字化けが発生することです。これはなぜですか?)
(なお、set names utf8 は以下の 3 つの文に相当します
SETcharacter_set_client = utf8;
SET 文字セット結果 = utf8; SET 文字セット接続 = utf8; )

4. HTML ページで使用される文字セット。

コードをコピー
  1. をmetaタグに設定します5. PHP テキスト ファイルで使用される文字セット。
    Linux では、vim を使用してファイルを開いて
    と入力できます。 :エンコーディングを設定します
    ファイルで使用されている文字セットを確認してください

    コードが文字化けしないようにするには、ファイル自体のエンコーディング、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 を使用してください
    mysql では表示され、疑問符として読み上げられます。


    参考:
    [1] 詳細な Mysql 文字セット設定 http://www.laruence.com/2008/01/05/12.html
    [2] PHP と MYSQL のエンコーディングの問題 http://blog.csdn.net/martinkro/article/details/5352474
    [3] SET NAMES と mysql(i)_set_charset の違いを深く理解するhttp://www.laruence.com/2010/04/12/1396.html
    [4] MySQL の「SET NAMES xxx」文字セット問題の分析 http://bbs.phpchina.com/thread-13861-1-1.html

データベーステーブル、mysql


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート