MySQL文字セットと検証規則の動作原理

4834 ワード

文字コード関連パラメータ
データストリームにおけるトランスコードプロセス
検証ルール
Tips:文字セットと検証規則は常に伴う
簡単なライブラリ文から
CREATE DATABASE [IF NOT EXISTS] 
[[DEFAULT] CHARACTER SET ] 
[[DEFAULT] COLLATE ];

db_name:データベース名必須
db_charset:データベースの文字セットデフォルトはサーバ文字セット
db_Collation:データベースの検証ルールデフォルトはサーバ照合ルールです
二文字セットと文字コードは何ですか?
文字コード:特定の文字とバイナリコードを1つずつマッピングする集合が文字セットです.各文字セットの対応する文字セットの符号化方法.
一般的な文字セットには、英語と特殊文字のみをサポートするASCII、中国語と英語をサポートするGBK、世界のすべての文字をサポートするUnicodeなどがあります.
ASCII文字セットの例
それはローマ字表の符号化方式に基づいて、彼は中国語がすべての英語の大文字と小文字を含むだけで数少ない特殊な記号を表すことができなくて、1文字当たり1バイトの低い7ビットは符号化ビットの最高位の保留で、一部の地方の最高位は拡張しました.表の記号、演算子などが追加されました.要するに1バイト8 bitは1文字を表し、1つに対応するため、全部で27文字である.拡張文字セットは28です.
三MySQL符号化方式の表示
show variables like 'character%';

Variable_name
Value
意味
character_set_client
utf8mb4
#クライアントソースデータ文字セット
character_set_connection
utf8mb4
#リンク層文字セット
character_set_database
utf8mb4
現在選択されているデータベースのデフォルト文字セット
character_set_filesystem
binary
現在のファイルシステムのエンコードフォーマット
character_set_results
utf8mb4
サーバが返すエンコーディングフォーマット
character_set_server
utf8mb4
サーバのデフォルトのエンコーディングフォーマット
character_set_system
utf8
データベース・システムで使用されるエンコーディング・フォーマット
character_sets_dir
/usr/local/mysql-8.0.15-macos10.14-x86_64/share/charsets/.
データベース文字セット格納アドレス
  • MySQLが起動したらcharacterに関心を持つ必要はありません.set_filesystem、character_set_system、character_sets_dir 3つの変数は、文字化けして問題にならないからです.システムファイルの格納方法は気にしないでください.文字セットの格納場所は性能とMySQL業務に関係なく、データベースで使用される符号化フォーマットはメタデータの格納フォーマットです.MySQLコード変換の原理を理解するのは難しくありません.
  • ライブラリを作成する場合、文字セットが明確に指定されていない場合はcharacter_を使用します.set_serverで指定した文字セット.テーブルを作成するときに、文字セットが明確に指定されていない場合は、現在のライブラリで使用されている文字セットが使用されます.新規レコード、テーブルフィールドの変更時に文字セットが明示的に指定されていない場合は、現在のテーブルで使用されている文字セットが使用されます.

  • 四符号化方式と検査規則の使用における役割
    1接続の概念
    1つの接続:サーバに接続するときのことです.--『MySQLマニュアル』
    たとえば、クライアントはクエリなどのSQL文を送信し、接続を介してサーバに送信します.サーバは、接続によって結果セットなどのクライアントに応答を送信します.
    2コミットの分割
  • クライアントがクエリを開始する
  • サーバcharacterを使用set_クライアント変数は、クライアントが送信するクエリで使用される文字セットとして使用されます.
  • サーバがクエリーを取得したらcharacterを使用します.set_Client符号化方式からcharacter_に移行set_接続に対応するチェックルールはcollation_connection,(クエリが文字文字列である場合、すなわち,_utf8のような文字形式の引用語があり、カラム値である場合、collation_connectionに依存しないチェックルール)
  • サーバがクエリーを実行した結果はcharacter_に従います.set_results符号化方式は、クエリ結果をクライアントに返す.カラム値やカラム名などの結果メタデータなどの結果データが含まれます.
  • 概要:文字列対3の注記:*[_charset_name]'String'[COLLATE collation_name]**
  • [_charset_name]文字符号化は、次の文字列の符号化方式を表す引用語である.
  • [COLLATE collation_name]この文字列を表すチェックマッチ方式
  • 公式文書からの引用語の解釈:charset_name式は正式に引用語と呼ばれている.解析プログラムに「文字セットXを使用する文字列が後で表示されます」と伝えます.以前は人々が困惑していたため、私たちは引用語が何の転換ももたらさないことを強調した.文字列の値は変更されません.引用語は標準的な16進数のアルファベットと数字の16進数の記号(x'literal'と0 xnnnn)の中で合法的で、および?(1つのプログラミング言語インタフェースで前処理文を使用する場合にパラメータを置き換えます).


  • 3トランスコード処理の更新と照会
    データ更新トランスコードプロセス:character_set_client-->character_set_接続-->テーブル文字セット.
    データ・クエリーのトランスコード・プロシージャ:表文字セット-->character_set_result
    4文字列の引用語と検証規則の決定
    引用語:charset_name式は正式に引用語と呼ばれている.解析プログラムに「文字セットXを使用する文字列が後で表示されます」と伝えます.以前は人々が困惑していたため、私たちは引用語が何の転換ももたらさないことを強調した.文字列の値は変更されません.引用語は標準的な16進数のアルファベットと数字の16進数の記号(x'literal'と0 xnnnn)の中で合法的で、および?(1つのプログラミング言語インタフェースで前処理文を使用する場合にパラメータを置き換えます).
  • CHARACTER SET XとCOLLATE Yが指定されている場合はCHARACTER SET XとCOLLATE Yを使用します.
  • CHARACTER SET Xが指定されていてCOLLATE Yが指定されていない場合、CHARACTER SET XとCHARACTER SET Xのデフォルト校正ルールが使用される.
  • それ以外の場合は、character_を使用します.set_接続とcollation_connectionシステム変数によって与えられる文字セットと校正規則.

  • Tips:COLLATE句.クエリーのデフォルトの照合ルールを上書きできます.MySQLマニュアル
    5検証ルールについて
  • 各文字セットには、デフォルトのチェックルール
  • があります.
  • の2つの異なる文字セットに一致しないチェックルール
  • 校正規則命名規則:関連する文字セット名で始まり、言語名が含まれ、_ci(大文字と小文字が敏感ではない)、cs(大文字と小文字が敏感)または_bin(二元)終了.

  • 一般的な操作
    現在サポートされているすべてのエンコーディング方法を表示
    show character set;
    

    サポートされているすべての検査ルールの表示
    show collation;
    

    文字コード設定の表示
    show variables like 'character%';
    

    現在の文字セットと校正規則の設定の表示
    show variables like 'collation_%';
    

    エンコーディング文字セットの設定
    set names 'utf8';
    

    データベース文字セットの変更
    alter database database_name character set xxx;
    

    表の文字セットの変更
  • は、テーブルの文字セットのみを変更し、後続のテーブルの新しいカラムのデフォルト定義に影響します.既存のカラムの文字セットは影響を受けません.
  • alter table table_name character set xxx;
    
  • テーブル文字セットと既存のカラム文字セットを同時に変更し、既存のデータを文字セット符号化変換する.
  • alter table table_name convert to character set xxx;
    

    列文字セットの変更
    alter table table_name modify col_name varchar(col_length) character set xxx;