mysql charset=utf8 本当に意味が分かりますか

mysql charset=utf8 本当に意味が分かりますか

1. まずテーブル作成ステートメントを見てみましょう

テーブル学生を作成(
  sid int 主キー aotu_increment、
  sname varchar(20) が null ではない、
  年齢 int
)文字セット=utf8;

次の質問を考えてみましょう。

  • テーブルを作成するときに、charset=utf8 を指定しないと、中国語の文字を挿入するときにエラーが発生するのはなぜですか?
  • charset=utf8 を指定した後、文字化けせずに中国語を再度挿入できるのはなぜですか?

2. CMDブラックウィンドウの文字セットを確認する

CMDの黒いウィンドウを開く -> マウスをウィンドウの上部に置く -> 右クリック -> プロパティ -> オプションをクリック

ここに画像の説明を挿入

上の図から、CMD でテキストを入力するために使用される文字エンコードは GBK であることがわかります。同時に、ファイルを保存すると、ローカル文字セットを表す ANSI 文字セットが表示されることがよくあります。中国では、ローカル文字セットは GBK エンコーディングを使用します。

3.この問題に気づきましたか?

ここに画像の説明を挿入

クライアントによって入力された文字はすべて GBK でエンコードされます。 mysql サーバーによって保存される文字は UTF8 でエンコードされます。次に、データベースとテーブルを追加、削除、変更、クエリし、最後にクライアント インターフェイスに戻ります。文字化けしないようにするには、 「エンコード変換プロセス」を経る必要があります。私が聞きたいのは、このエンコード変換プロセスは正確には何によって完了するのかということです。

4. あまり馴染みのないMySQL操作コマンド

-- データベースでサポートされているすべての文字セットを表示します (このコマンドは単独で実行されます)。
mysql> 文字セットを表示します。
-- システムの現在の状態を確認します。ここで、いくつかの文字セット設定を確認できます。
mysql> ステータス;
-- すべての文字セット設定を含むシステム文字セット設定を表示します。mysql> show variables like '%char%';

操作結果は次のとおりです。

ここに画像の説明を挿入

上の写真から、「接続」と呼ばれるものがあることがわかります。中国語の名前は「コネクタ」です。 「コネクタ」は「エンコーディング変換処理」を実行するために使用されます。

1) コネクタの特性

①「コネクタの機能」

クライアントとサーバーを接続して文字セットを変換します。コネクタにはこの自動変換機能があります。

②「コネクタワークフロー」:
Ⅰ まず、クライアントの文字がコネクタに送信され、コネクタはエンコーディングを選択して変換し(変換後のエンコーディングはコネクタのエンコーディング形式と一致します)、一時的に保存します。
Ⅱ その後、コネクタはそれを再びサーバーと一致するエンコーディングに変換し、最終的にサーバーに保存します。
III 次に、サーバーから返された結果は再びコネクタを通過し、コネクタはエンコードを選択して変換し(変換後のエンコードはコネクタのエンコード形式と一致します)、一時的に保存します。
IV 最後に、コネクタは結果をクライアントと一致する文字セットに変換し、クライアントで正常に表示できるようにします。

2) コネクタの機能説明図

図1:

ここに画像の説明を挿入

図1は次のように説明されます。

ここに画像の説明を挿入

図2:

ここに画像の説明を挿入

図2は次のように説明されます。

ここに画像の説明を挿入

5. 上記2つの図の実際のデモンストレーション

1) まず、以下のコードを理解してください。

-- 1) クライアントの文字セットを設定します。
character_set_client=gbk を設定します。
-- 2) コネクタの文字セットを設定します。
character_set_connection=utf8 を設定します。
-- 3) 返される結果の文字セットを設定します。
character_set_results=gbk を設定します。

2) コードデモのプロセスは、次のリンクの sql ファイルに詳しく記載されており、ダウンロードして自分で表示できます。

http://note.youdao.com/noteshare?id=3fe60a490637d1a51ac78bf4a9e7e4d0&sub=511D73BDDEA34D9BAC565249035D74A8 翻訳

6. 文字化けの2つの原因

デコードと実際のエンコードの不一致によって生じた文字化けを修復できます

送信プロセス中に、一貫性のないエンコードにより一部のバイトが失われ、修復できない文字化けが発生します。

1) エンコードとデコードの不一致による文字化け

ここに画像の説明を挿入

2) 文字化けは、送信中にバイトが失われたために発生します。

ここに画像の説明を挿入

7. 現状分析(何も設定されていない場合のシステムのデフォルトは何ですか?)

1) 次の図をよく見てください

ここに画像の説明を挿入

上記の図から、次のことがわかります(次のテキストの説明をよく理解できます)。

ここに画像の説明を挿入

図2:

ここに画像の説明を挿入

2) セット名の意味 gbk

-- クライアント、コネクタ、戻り値の文字セットが同じで、すべて gbk の場合、次の略語を使用できます。
 名前を設定する gbk;
 -- 上記の SQL ステートメントには、実際には次の 3 つの意味が含まれています。
 character_set_client=gbk を設定します。
 character_set_connection=gbk を設定します。
 character_set_results=gbk を設定します。

以上がこの記事の全文です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux システムで MySQL の文字セットを UTF8 に変更する手順
  • MySQL での utf8mb4 照合の例
  • MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci
  • MySQL データベースのエンコーディングを utf8mb4 に変更する方法
  • MySQL の文字セット utf8 を utf8mb4 に変更する方法
  • mysql 文字化けした文字 latin1 文字を UTF8 に変換 詳細

<<:  Ubuntu20のtzselect設定時間失敗問題、Raspberry Piサーバ(推奨)

>>:  WeChatアプレットにおけるデータ保存実装方法

推薦する

MySQL パフォーマンス ストレス ベンチマーク ツール sysbench の使い方の紹介

目次1. sysbenchの紹介#プロジェクトダウンロードアドレス: 2. Sysbenchのインス...

Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました

MySQLへの接続ここでは、リモート接続に navicat を使用します。MySQL に接続する前に...

高度な CSS の 3 つの方法を使用して複数行の省略を実装するサンプル コード

序文これは古くからの要望ですが、オンラインで解決策を探している人はまだ多く、特に検索結果の上位にラン...

一般的なCSS3アニメーションの実装方法

1. 何ですかCSS アニメーションは、CSS を使用して拡張マークアップ言語 (XML) 要素をア...

CSSは、他のレイヤーを変更せずに、多層ネスト構造の最外層を回転させる効果を実現します。

次のようなシナリオがあります。円形のコンテナで、最も外側のコンテナの背景が円弧になっています。内側の...

Nginx のパラメータをオンにして Web パフォーマンスを 3 倍向上させる方法

1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...

Mysql のいくつかの複雑な SQL ステートメント (重複行のクエリと削除)

1. 重複行を見つける blog_user_relation a から * を選択 WHERE (...

マークアップ言語 - 印刷スタイルシート

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

表の最初の行と最初の列を固定し、適応型ウィンドウを実現するための CSS の例コード

今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...

MySQL のロックの仕組みと使用法の分析

この記事では、例を使用して MySQL のロック メカニズムと使用方法を説明します。ご参考までに、詳...

CSS エクスペリエンスを充実させる 5 つの便利な CSS セレクターを紹介します

Web デザイナーとして豊富な CSS 経験を持つ私たちは、あらゆる種類のコード構文、互換性、スニペ...

Ubuntu での MySQL へのリモート ログインのインストールと設定に関するチュートリアル

この記事では、MySQLのインストールと設定のリモートログインチュートリアルを参考までに紹介します。...

MySQLでホワイトリストアクセスを設定する方法

MySQLでホワイトリストアクセスを設定する手順1. ログイン mysql -uroot -pmys...

CSSメディアクエリのアスペクト比を小さくする方法

CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...

Win10システムにMySQL 8.0をインストールするときに発生する問題を解決する

Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...