MySQL文字セットGBK、GB 2312、UTF 8の違いはMYSQL中国語の文字化け問題を解決します。
4266 ワード
MySQLに含まれるいくつかのキャラクターセットは、デフォルトで採用されています。character-set-database:データベース文字セット。character-set-table:データベーステーブル文字セット。優先度が順次増加する。したがって、通常はcharacter-set-serverを設定するだけで、データベースとテーブルを作成する時は特に文字セットを指定しないで、character-set-server文字セットを統一的に採用します。character-set-client:クライアントの文字セット。クライアントのデフォルトの文字セット。クライアントがサーバに要求を送信すると、その文字セットでエンコードすることが要求されます。character-set-result:結果文字セット。サーバがクライアントに結果や情報を返すと、その文字セットでエンコードされます。クライアントでは、character-set-resultが定義されていない場合は、character-set-client文字セットをデフォルトの文字セットとして使用する。したがって、character-set-client文字セットを設定するだけです。中国語を処理するなら、character-set-serverとcharacter-set-clientは共にGB 2312に設定でき、多言語を同時に処理するなら、UTF 8に設定される。MySQLの中国語問題について、文字化けを解決する方法は、SQL文を実行する前に、MySQL以下の3つのシステムパラメータをサーバの文字セットcharacter-set-serverと同じ文字セットに設定することである。character_setクライアントの文字セット。character_setその結果、文字セット。character_setconnection:文字セットを接続します。この3つのシステムパラメータを設定して、MySQLに文を送信します。set names gb 2312はGBK、GB 2312、UTF 8 UTF-8に関して、Unicoode Trans formation Format-8 bitで、BOMを含むことができますが、通常はBOMを含まないです。は、国際的な文字を解決するために使用されるバイトコードで、英語では8ビット(すなわち1バイト)を使用し、中国語では24バイト(3バイト)を使用して符号化されます。UTF-8は全世界のすべての国で必要な文字を含んでいます。国際コードです。汎用性が高いです。UTF-8符号化された文字は、UTF 8文字セットをサポートする各国のブラウザに表示されます。例えば、UTF 8符号化であれば、外国人の英語IEにも中国語が表示され、IEの中国語サポートパッケージをダウンロードする必要がない。GBKは国家標準GB 2312に基づいて拡張されたGB 2312互換規格である。GBKの文字コードは、二バイトで表しています。つまり、中国語、英語の文字を問わず、二バイトで表しています。中国語を区別するために、一番高い位置は1に設定されています。GBKは全ての中国語文字を含み、国家コードであり、汎用性はUTF 8より悪いが、UTF 8が占有するデータベースはGBDより大きい。GBK、GB 2312などとUTF 8との間はユニックコードを通じて相互に変換する必要があります。GBK、GB 2312-ユニックode-UTF 8 UTF 8-ユニックode-GBK、GB 2312は一つのウェブサイト、フォーラムにとって、英語文字が多い場合、UTF-8を使ってスペースを節約することを提案します。しかし、現在多くのフォーラムのプラグインは一般的にGBKだけをサポートしています。GB 2312はGBKのサブセットであり、GBKはGB 18030のサブセットGBKであり、中日韓文字を含む大文字セットである。中国語のウェブサイト推薦GB 2312 GBKであれば、時々問題がある。すべての文字化け問題を回避するためにUTF-8を採用しなければならない。将来は国際化をサポートするために、UTF-8は大きな文字セットと見なされ、大部分の文字コードが含まれている。UTF-8を使う利点の一つは、他の地域のユーザー(香港や台湾など)が簡体字中国語でサポートをインストールする必要がなく、文字化けが発生しないように正常に閲覧できることです。gb 2312は、簡体字中国語のコードgbkが簡体字中国語および繁体中国語のbig 5をサポートしています。繁体字中国語utf-8はほとんどの文字をサポートしています。まず文字化けの状況を分析します。データベースに書き込むときに文字化けとして書き込まれます。検索結果は文字化けが発生したときにどのような状況に戻りますか?私たちはまずmysql命令でショーvariables like'%char%を入力します。mysql文字セットの設定状況を確認する:mysql>show variables like'%char'、+----------------------------------------------------------------------------------------------------------------------------------Varable_name|Value+----------------------------------------------------------------------------------------------------------------------------------------------------------------setclient_gbk_character_usetconnection gbk𞓜チャラクターusetdatabase𞓜gbk 124; character_setfilesystemビナーリーsetreults 124 gbk 124チャラクターusetserver𞓜gbk 124; character_setsystem𞓜utf 8𞓜チャラクタ_setsdir|/usr/local/mysql/share/mysql/charsets/|+------------------------------------------------------------検索結果において、クライアント、データベース接続、ファイルシステム、クエリ結果、サーバ、システムの文字セットはここに設定されています。サーバーの文字セットはインストール時に決定されます。文字化け問題に関係なく文字化けの問題はクライアント、データベース接続、データベース、クエリ結果の文字セットと関係があります。プログラムとは、クライアントがmysqlに中国語のデータを書き込む時、クライアント、データベース接続、データベースの書き込み時にそれぞれ符号化変換を行います。クエリを実行する時、戻りの結果、データベース接続、クライアントがそれぞれ符号化変換を行います。検索結果とデータベース接続のうちの一つまたは複数のリンクを次に解決します。この問題をデータベースに登録する時、私達はmysql--default-character-set=文字セット-u root-pで接続します。ここでshow variabes like'%charg';コマンドで文字セットの設定を確認すると、クライアント、データベース接続、クエリ結果の文字セットが登録時に選択された文字セットに設定されています。登録されている場合は、set names文字セットが使用できます。コマンドで上記の効果を実現します。以下のコマンドと同じです。setclient=文字セットset character_setconnection=キャラクターコレクションset character_setresult=文字セットはJDBCでデータベースを接続すれば、URL:URL=jdbcをこのように書くことができます。mysql://localhost:3306/abs?useUnicode=true&characterEncoding=文字セットJSPページなどの端末も該当する文字セットデータベースの文字セットを設定します。mysqlの起動設定を変更して文字セットを指定できます。「create database」にdefault character set文字セットを追加して、「database」の文字セットを強制的に設定することもできます。このような設定により、データ書込み読み出しフロー全体で文字セットが統一されています。文字化けが発生しません。なぜコマンドラインから直接中国語に書き込み、設定しなくても文字化けが発生しませんか?コマンドラインから、クライアント、データベース接続、クエリ結果の文字セット設定が変更されていません。入力された中国語は一連のトランスコードを経て、初期の文字セットに戻ります。もちろん文字化けではありませんが、データベースに中国語の文字として保存されているという意味ではありません。クライアント接続はGBKコードを使用して、connectionはデフォルトのISO 8859-1(すなわちmysqlのlatin 1)を使用して、クライアントから「中国語」という文字列を送信します。クライアントは、一連のGBK形式のバイナリコードをconnection層に送信します。connection層はISO 8859-1形式でこのバイナリコードをデータベースに送信します。データベースはこのコードをutf 8形式で保存しています。このフィールドをutf 8形式で読み取っても、文字化けしています。つまり中国語のデータはデータベースに書き込む時に文字化けして保存されています。同じクライアントでクエリー操作を行う時に、書き込み時とは逆の操作をしました。エラーのutf 8フォーマットのバイナリコードはまた正しいGBKコードに変換され、正しく表示されます。