mysql文字セットの文字化け問題の解決方法を紹介します。


character-set-server/default-character-set:サーバの文字セットは、デフォルトで採用されています。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コードに変換され、正しく表示されます。java、jspにはエンコーディング方式を設定します。jspページ(*.jsp)<%@page laguage="java"import="java.tentill.*partage="Entage="Entage="charset=UTF-8「%」以下の方式はjsp、servlet、action中(*.java)request.set CharcterEncocding("UTF-8");レスポンス.set CharcterEnccoding(「UTF-8」)下はhtmlページ(*.httm;*.)<meta http-equiv=“content-type”content=“text/html”charset=UTF-8">Tomcate設定符号化(server.xml)<Connectorその他はport="80"URIEncoding="UTF-8">mysql設定符号化コマンドSET character_setclient=utf 8SET character_setconnection=utf 8;SET character_setdatabase=utf 8;SET character_setresults=utf 8/*ここは注意してください。とても役立ちます。setserver=utf 8;SETコールconnection=utf 8_ビンSETコールdatabase=utf 8_ビンSETコールserver=utf 8_ビンmy.iniでは、デフォルトの符号化default-character-set=utf 8接続データベース設定符号化jdbcを設定します。mysql://192.168.0.5:3306/test?characterEncoding=utf8
 
/*****************************************java mysq ****************************************/
java UTF-8;GBK;GB2312;ISO-8859-1;
mysql utf8;gbk;gb2312;latin1

/******************************************** *********************************************/
// (SetCharacterEncodingFilter.java)
package com.sorc;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SetCharacterEncodingFilter extends HttpServlet implements Filter{
private FilterConfig filterConfig;
private String encoding=null;
//Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig){
this.filterConfig=filterConfig;
encoding=filterConfig.getInitParameter("encoding");
}
//Process the request/response pair
public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain){
try{
request.setCharacterEncoding(encoding);
filterChain.doFilter(request,response);
} catch(ServletException sx){
filterConfig.getServletContext().log(sx.getMessage());
} catch(IOException iox){
filterConfig.getServletContext().log(iox.getMessage());
}
}
//Clean up resources
public void destroy(){
}
}
//web.xml (web.xmd)
<filter>
<filter-name>setcharacterencodingfilter</filter-name>
<filter-class>com.sorc.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setcharacterencodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/************は上の基礎の下で面接が完全に解決案を満たしました。************************************************************************************************があります。GBKコードを使った解決策です。この一番簡単な設定コードはGBKです。データベースgbkを使用して、フィルタを使って、gbkにコーディングします。効果は、追加データの无文字化読出し无文字化データベース管理ツールの无文字化された随所sql构造とデータ无文字化2.UTF-8を使ってエンコーディングソリューションのすべての符号化をUTF-8データベースエンコーディングutf 8に設定し、フィルタ符号化utf 8データベース接続を设定しますか?characterEnccoding=utf 8はその後、データベース管理ツールまたはmysql命令行でSET character_を実行します。setresults=gbk;効果は、データを追加して文字化けしていないデータベースを読み出します。文字化けしていないデータベース管理ツールが文字化けしています。ページはUTF 8データベースを使って、latin 1のソリューションjap java tomcatを使って、UTF-8フィルタutf 8データベース接続に設定します。characterEncoding=latin 1データベースの他のlatin 1は、データベース管理ツールまたはmysqlコマンドでSET character_を実行します。setresults=gbk;効果は、データを追加します。文字化けしていません。データベース管理ツールが文字化けしていません。どこでもsql構造とデータがあります。文字化けしています。ページやjavaコードの手動トランスコードは必要ありません。