ホームページ >php教程 >php手册 >詳細な Mysql 文字セット設定

詳細な Mysql 文字セット設定

WBOY
WBOYオリジナル
2016-06-16 08:39:261071ブラウズ

mysql クライアントと mysql サーバーの間には文字セットコンバータがあります。
character_set_client =>gbk: コンバーターは、クライアントによって送信されたエンコーディングが gbk 形式であることを認識します
character_set_connection=>gbk: クライアントから送信されたデータを gbk 形式に変換します
character_set_results =>gbk:
注: 上記の 3 つの文字セットは、セット名 gbk
を使用して均一に設定できます。
例:
テーブルの作成テスト(
名前 varchar(64) NOT NULL
)charset utf8;#utf8 はサーバー側の文字エンコーディングを表します
まず、データテーブルテストにデータを挿入します
テスト値('test');
その後、データ「test」が「utf8」形式でデータベースに保存されます
プロセス:

まず、mysql クライアントを介してデータを Mysql サーバーに送信します。文字セット コンバーターを通過すると、character_set_connection の値が gbk であるため、クライアントから送信されたデータは gbk 形式に変換されます。コンバーターがデータをサーバーに送信すると、サーバーがデータを utf8 で保存していることがわかり、データを gbk 形式から utf8 形式に自動的に変換します
文字化けはいつ発生しますか?
  1. クライアントのデータ形式が宣言された character_set_client
  2. と一致しません
header('Content-type:text/html;charset=utf8'); によってクライアントデータを utf8 形式に変換します。 データが「Character Set Converter」を通過するとき、character_set_client=gbk、およびcharacter_set_connection であるため、 gbk と等しいため、クライアントから送信されたデータ (実際には utf8 形式) は変換されません。
ただし、文字セットコンバーターがデータをサーバーに送信すると、サーバーが必要とする形式が utf8 であることが判明するため、現在のデータを gbk 形式として処理して utf8 に変換します。 (しかし、このステップは実際には間違っています。)
2. 結果がクライアントページと一致しない場合

返される結果の形式を utf8 に設定しますが、クライアントが受け入れる形式は gbk であるため、文字化けが発生します

使用可能なすべての文字セットは、文字セット構文を使用して表示できます
ラテン文字セット

注: Maxlen 列には、文字の保存に使用される最大バイト数が表示されます。
utf8 文字セット

gbk 文字セット

データはいつ失われますか?
上の 3 つの図を比較すると、文字を格納するために使用される最大バイト数が文字セットごとに異なり、utf8 が最大で、latin が最小であることがわかります。したがって、文字セットコンバーターを通過するときに適切に処理されないと、データが失われ、修復不可能になります。
例:
character_set_connection の値を lantin に変更する場合

クライアントから送信された gbk データは、lantin1 形式に変換されます。gbk 形式のデータはより多くの文字を占有し、データ損失が発生するためです。

概要:
  1. Character_set_client とcharacter_set_results は、一方がクライアントによって送信されたデータ形式を表し、もう一方がクライアントによって受け入れられたデータ形式を表すため、通常は一貫している必要があります
  2. データの損失を避けるために、character_set_connection の文字エンコーディングは、character_set_client の文字エンコーディングよりも大きい必要があります
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。