詳細な Mysql 文字セット設定、詳細な MySQL 文字セット
mysqlクライアントと
mysqlサーバーの間には文字セットコンバータがあります。
Character_set_client =>gbk: コンバータは、クライアントから送信されたエンコーディングが gbk 形式であることを認識しています。
Character_set_connection=>gbk: クライアントから送信されたデータを gbk 形式に変換します
文字セット結果 =>gbk:
注: 上記の 3 つの文字セットは、セット名 gbk を使用して均一に設定できます。
例:
テーブル作成テスト(
名前 varchar(64) NOT NULL
)charset utf8;#utf8 ここで、サーバー側の文字エンコーディングを表します。
まず、データテーブルにデータを挿入します。
テスト値('test'); に不活性化します。
すると、「test」というデータが「utf8」形式でデータベースに保存されます。
プロセス:
まず、データは mysql クライアントを介して Mysql サーバーに送信されます。文字セット コンバーターを通過すると、character_set_connection の値が gbk であるため、クライアントから送信されたデータは gbk 形式に変換されます。データをサーバーに送信する際、サーバーはデータを utf8 で保存していることがわかり、内部でデータを gbk 形式から utf8 形式に自動的に変換します。
文字化けはいつ発生しますか?
データが「文字セットコンバータ」を通過するときに、 header('Content-type:text/html;charset=utf8'); を通じてクライアントデータを utf8 形式に変換します。 これは、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 形式のデータはより多くの文字を使用し、データ損失が発生するためです。
概要: