ホームページ  >  記事  >  データベース  >  MySQL での中国語データの問題チュートリアル

MySQL での中国語データの問題チュートリアル

藏色散人
藏色散人転載
2018-11-22 16:30:362241ブラウズ

この記事では主に mysql の中国語データに関する問題について紹介します。困っている友人の役に立てば幸いです。

推奨参考チュートリアル: 「mysql チュートリアル

中国語データ問題での中国語データの問題チュートリアル>

中国語データ問題の本質は文字セットの問題です。

コンピュータはバイナリ データのみを認識し、人間は文字 (記号) を認識する傾向があるため、バイナリと文字の間の対応関係 (文字セット) が必要です。

MySQL データベースのクライアントを介してサーバーに中国語データを挿入すると、クライアントとサーバーの文字セット設定が異なることが原因である可能性があります。例:

  • クライアントの文字セットは gbk であり、MySQL での中国語データの問題チュートリアル つの漢字が 2 バイトに対応します。サーバーは

    utf8
  • で、MySQL での中国語データの問題チュートリアル つの漢字は MySQL での中国語データの問題チュートリアル バイトに相当します。
  • これにより、エンコード変換プロセス中に明らかに問題が発生し、中国語データの挿入に失敗します。

  • すべてのデータベース サーバーの一部の特性はサーバー側の変数によって維持されるため、システムは最初に独自の変数を読み取り、特定の症状を確認します。この場合、次のステートメントを使用して、サーバーが認識する文字セットを確認できます:
-- 查看服务器识别的全部字符集show character set;

上記のクエリを通じて、次のことがわかります:

サーバーは全能であり、そのすべての文字セットがサポートされています。 MySQL での中国語データの問題チュートリアル

サーバーは非常に多くの文字セットをサポートしているため、クライアントを処理するサーバーのデフォルトの文字セットが常に存在します。したがって、次のステートメントを通じてサーバーのデフォルトの外部処理文字セットを確認できます:

-- 查看服务器默认的对外处理的字符集show variables like &#MySQL での中国語データの問題チュートリアル9;character_set%&#MySQL での中国語データの問題チュートリアル9;;

MySQL での中国語データの問題チュートリアル 注 MySQL での中国語データの問題チュートリアル: サーバーのデフォルトのクライアントが送信したデータ文字セット注 2: 接続層の文字セットは

utf8
    #です。 # 注釈 MySQL での中国語データの問題チュートリアル: 現在のデータベースの文字セットは
  • utf8

    です。 注釈 4: 外部処理用のサーバーのデフォルトの文字セットは utf8## です。 #.

  • 上記のクエリにより、次のことがわかります。

    サーバーのデフォルトの外部処理文字セットは utf8

    .
  • # # 次に、クライアントのプロパティを通じて、クライアントがサポートする文字セットをチェックします。
  • 明らかに、問題の原因が見つかりました。実際、次のとおりです。
  • クライアント サポートされている文字セットは
  • gbk

    ですが、サーバーによる外部処理のデフォルトの文字セットは utf8 であるため、矛盾があります。

問題が判明したので、解決策は次のとおりです。

サーバーが受信したデフォルトの文字セットを gbk.

-- 修改服务器默认接收的字符集为 GBK(不区分大小写)set character_set_client = gbk;
# に変更します。 ##こうすれば、再度中国語データを挿入すると挿入が成功します。しかし、データを確認してみると、以前挿入した中国語データが文字化けしているという別の問題が見つかりました。しかし、クエリを実行するとき、データのソースはサーバー (

utf8

) であり、クライアントはデータを解析し、クライアントは

gbk

形式のデータのみを認識するため、これは正常です。文字化けが表示されます。 MySQL での中国語データの問題チュートリアル

したがって、解決策は次のとおりです。

サーバーからクライアントに提供されるデータ文字セットを gbk.<pre class="prettyprint">-- 修改服务器给客户端的数据字符集为 GBK(不区分大小写)set character_set_results = gbk;</pre># に変更します。

# #上の図に示すように、中国語データをサーバーに挿入する問題は解決されました。

さらに、前に使用した SQL 文: <pre class="prettyprint">-- 修改的只是会话级别,即当前客户端当次连接有效,关闭后失效set 变量 = 值;</pre> この場合、クライアントを再起動するたびに、順番にリセットする必要があり、面倒なので、次のように使用できます。クイック設定 方法は次のとおりです。

set names 字符集;

たとえば、

/**
* 恒等于 set character_set_client = gbk;
* 恒等于 set character_set_results = gbk;
* 恒等于 set character_set_connection = gbk;
*/set names gbk;
は、上記のステートメントが MySQL での中国語データの問題チュートリアル つの変数の値を同時に変更することを意味します。このうち、connection は接続層であり、文字セット変換の仲介者となります。client

results の文字セットと一致していれば、それが変換されます。より効率的になりますが、それは問題ではありません。

以上がMySQL での中国語データの問題チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。