この記事では主に mysql の中国語データに関する問題について紹介します。困っている友人の役に立てば幸いです。
推奨参考チュートリアル: 「mysql チュートリアル」
中国語データ問題の本質は文字セットの問題です。
コンピュータはバイナリ データのみを認識し、人間は文字 (記号) を認識する傾向があるため、バイナリと文字の間の対応関係 (文字セット) が必要です。
MySQL データベースのクライアントを介してサーバーに中国語データを挿入すると、クライアントとサーバーの文字セット設定が異なることが原因である可能性があります。例:
クライアントの文字セットは gbk
であり、MySQL での中国語データの問題チュートリアル つの漢字が 2 バイトに対応します。サーバーは
これにより、エンコード変換プロセス中に明らかに問題が発生し、中国語データの挿入に失敗します。
-- 查看服务器识别的全部字符集show character set;上記のクエリを通じて、次のことがわかります:
サーバーは全能であり、そのすべての文字セットがサポートされています。
サーバーは非常に多くの文字セットをサポートしているため、クライアントを処理するサーバーのデフォルトの文字セットが常に存在します。したがって、次のステートメントを通じてサーバーのデフォルトの外部処理文字セットを確認できます: -- 查看服务器默认的对外处理的字符集show variables like &#MySQL での中国語データの問題チュートリアル9;character_set%&#MySQL での中国語データの問題チュートリアル9;;
注 MySQL での中国語データの問題チュートリアル: サーバーのデフォルトのクライアントが送信したデータ文字セット注 2: 接続層の文字セットは
utf8 です。 注釈 4: 外部処理用のサーバーのデフォルトの文字セットは utf8## です。 #.
サーバーのデフォルトの外部処理文字セットは utf8
ですが、サーバーによる外部処理のデフォルトの文字セットは utf8
であるため、矛盾があります。
サーバーが受信したデフォルトの文字セットを gbk.
-- 修改服务器默认接收的字符集为 GBK(不区分大小写)set character_set_client = gbk;# に変更します。 ##こうすれば、再度中国語データを挿入すると挿入が成功します。しかし、データを確認してみると、以前挿入した中国語データが文字化けしているという別の問題が見つかりました。しかし、クエリを実行するとき、データのソースはサーバー (utf8
) であり、クライアントはデータを解析し、クライアントは
gbk形式のデータのみを認識するため、これは正常です。文字化けが表示されます。
したがって、解決策は次のとおりです。 サーバーからクライアントに提供されるデータ文字セットを 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 サイトの他の関連記事を参照してください。