このノートは主にMySQLの文字セットに関する知識の学習を記録します 文字セット通常、テーブルを作成するには次のステートメントを使用し、テーブルの作成時に文字セットを utf8 エンコーディングとして指定します。 テーブル「test」を作成します( `c1` int UNSIGNED NOT NULL AUTO_INCREMENT, `c2` varchar(255)、 `c3` 文字(11)、 `c4` varchar(255)、 主キー (`c1`) )ENGINE=InnoDB デフォルト文字セット=utf8; しかし実際には、MySQL は utf8 以外の文字セットもサポートしています。コマンド show charset を使用すると、現在 MySQL でサポートされているすべての文字セットを表示できます。 たとえば、次の図は、MySQL でサポートされているすべての文字セットを示しています。 上の図からわかるように、4 番目の列は文字セットの最大長を示しています。 MySQL では、テーブルを作成するときによく使用される utf8 の最大長は、実際には 3 文字です。 utf8 は 1 ~ 4 文字を使用して特定のコンテンツを表すと一般的に考えられていますが、MySQL における utf8 は実際には utf8mb3 の別名です。MySQL で最大 4 文字を使用する正規のものは utf8mb4 です。 知らせ: utf8mb4 utf8mb4 比較ルール上の図では、3 番目の列の「デフォルトの照合」がこれらの文字セットのデフォルトの比較ルールです。たとえば、acsii 文字セットのデフォルトの比較ルールは ascii_general_ci であり、utf8 文字セットのデフォルトの比較ルールは utf8_general_ci です。 実際、各文字セットには多くの比較規則があります。たとえば、次の図に示すように、acsii文字セットの比較規則を見てみましょう。 mysql> 'ascii%' のような照合順序を表示します。 +------------------+---------+----+----------+----------+----------+ | 照合 | 文字セット | ID | デフォルト | コンパイル済み | ソート長 | +------------------+---------+----+----------+----------+----------+ | ascii_general_ci | ascii | 11 | はい | | 0 | | ascii_bin | ascii | 65 | | | 0 | +------------------+---------+----+----------+----------+----------+ ascii_general_ci は一般的な比較を示し、_ci は大文字と小文字を区別しないことを意味します。 (逆に、_csは大文字と小文字を区別することを意味します) ascii_binはバイナリ比較を意味します 次の図に示すように、utf8とutf8mb4の文字セットの比較規則を見てみましょう。 mysql> 'utf8%' のような照合順序を表示します。 +--------------------------+---------+-----+----------+----------+----------+ | 照合 | 文字セット | ID | デフォルト | コンパイル済み | ソート長 | +--------------------------+---------+-----+----------+----------+----------+ | utf8_general_ci | utf8 | 33 | はい | はい | 1 | | utf8_bin | utf8 | 83 | | はい | 1 | | utf8_unicode_ci | utf8 | 192 | | はい | 8 | | utf8_icelandic_ci | utf8 | 193 | | はい | 8 | | utf8_latvian_ci | utf8 | 194 | | はい | 8 | | utf8_romanian_ci | utf8 | 195 | | はい | 8 | | utf8_slovenian_ci | utf8 | 196 | | はい | 8 | | utf8_polish_ci | utf8 | 197 | | はい | 8 | | utf8_estonian_ci | utf8 | 198 | | はい | 8 | | utf8_spanish_ci | utf8 | 199 | | はい | 8 | | utf8_swedish_ci | utf8 | 200 | | はい | 8 | | utf8_turkish_ci | utf8 | 201 | | はい | 8 | | utf8_czech_ci | utf8 | 202 | | はい | 8 | | utf8_danish_ci | utf8 | 203 | | はい | 8 | | utf8_lithuanian_ci | utf8 | 204 | | はい | 8 | | utf8_slovak_ci | utf8 | 205 | | はい | 8 | | utf8_spanish2_ci | utf8 | 206 | | はい | 8 | | utf8_roman_ci | utf8 | 207 | | はい | 8 | | utf8_persian_ci | utf8 | 208 | | はい | 8 | | utf8_esperanto_ci | utf8 | 209 | | はい | 8 | | utf8_hungarian_ci | utf8 | 210 | | はい | 8 | | utf8_sinhala_ci | utf8 | 211 | | はい | 8 | | utf8_german2_ci | utf8 | 212 | | はい | 8 | | utf8_croatian_ci | utf8 | 213 | | はい | 8 | | utf8_unicode_520_ci | utf8 | 214 | | はい | 8 | | utf8_vietnamese_ci | utf8 | 215 | | はい | 8 | | utf8_general_mysql500_ci | utf8 | 223 | | はい | 1 | | utf8mb4_general_ci | utf8mb4 | 45 | はい | はい | 1 | | utf8mb4_bin | utf8mb4 | 46 | | はい | 1 | | utf8mb4_unicode_ci | utf8mb4 | 224 | | はい | 8 | | utf8mb4_icelandic_ci | utf8mb4 | 225 | | はい | 8 | | utf8mb4_latvian_ci | utf8mb4 | 226 | | はい | 8 | | utf8mb4_romanian_ci | utf8mb4 | 227 | | はい | 8 | | utf8mb4_slovenian_ci | utf8mb4 | 228 | | はい | 8 | | utf8mb4_polish_ci | utf8mb4 | 229 | | はい | 8 | | utf8mb4_estonian_ci | utf8mb4 | 230 | | はい | 8 | | utf8mb4_spanish_ci | utf8mb4 | 231 | | はい | 8 | | utf8mb4_swedish_ci | utf8mb4 | 232 | | はい | 8 | | utf8mb4_turkish_ci | utf8mb4 | 233 | | はい | 8 | | utf8mb4_czech_ci | utf8mb4 | 234 | | はい | 8 | | utf8mb4_danish_ci | utf8mb4 | 235 | | はい | 8 | | utf8mb4_lithuanian_ci | utf8mb4 | 236 | | はい | 8 | | utf8mb4_slovak_ci | utf8mb4 | 237 | | はい | 8 | | utf8mb4_spanish2_ci | utf8mb4 | 238 | | はい | 8 | | utf8mb4_roman_ci | utf8mb4 | 239 | | はい | 8 | | utf8mb4_persian_ci | utf8mb4 | 240 | | はい | 8 | | utf8mb4_esperanto_ci | utf8mb4 | 241 | | はい | 8 | | utf8mb4_hungarian_ci | utf8mb4 | 242 | | はい | 8 | | utf8mb4_sinhala_ci | utf8mb4 | 243 | | はい | 8 | | utf8mb4_german2_ci | utf8mb4 | 244 | | はい | 8 | | utf8mb4_croatian_ci | utf8mb4 | 245 | | はい | 8 | | utf8mb4_unicode_520_ci | utf8mb4 | 246 | | はい | 8 | | utf8mb4_vietnamese_ci | utf8mb4 | 247 | | はい | 8 | +--------------------------+---------+-----+----------+----------+----------+ 異なる比較ルールを使用してデータを比較すると、結果が異なる場合があります。 文字セットと比較ルールは互いに対応しています。文字セットのみを変更しても、比較ルールのみを変更しても、もう一方はそれに応じて自動的に変更されます。 4つのレベルの文字セットと比較規則文字セットと比較ルールについては上記で説明しました。実際、MySQL にはさまざまなレベルの文字セットと比較ルールがあります。
サーバーレベルの文字セットについては、パラメータ character_set_server を参照してください。サーバーレベルの比較ルールについては、パラメータ collation_server を参照してください。 mysql> 'character_set_server' のような変数を表示します。 +----------------------+-------+ | 変数名 | 値 | +----------------------+-------+ | 文字セットサーバー | utf8 | +----------------------+-------+ セット内の 1 行 (0.00 秒) mysql> 'collation_server' のような変数を表示します。 +------------------+-----------------+ | 変数名 | 値 | +------------------+-----------------+ | 照合サーバー | utf8_general_ci | +------------------+-----------------+ セット内の 1 行 (0.00 秒) データベース レベルで文字セットと比較ルールを表示する場合は、まず xxxdb を使用して特定のデータベースに切り替え、次に show variables like 'character_set_database' と show variables like 'collation_database' を実行して、データベースの文字セットと比較ルールを表示します。 データベースが変更されました mysql> 'character_set_database' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | 文字セットデータベース | utf8 | +------------------------+-------+ セット内の 1 行 (0.00 秒) mysql> 'collation_database' のような変数を表示します。 +--------------------+-----------------+ | 変数名 | 値 | +--------------------+-----------------+ | 照合データベース | utf8_general_ci | +--------------------+-----------------+ セット内の 1 行 (0.00 秒) テーブルまたはテーブル内の列の文字セットと比較ルールを表示する場合は、show create table xxxtb を使用して、使用されている文字セットと比較ルールを含む特定のテーブル作成ステートメントを表示できます。 データベースの作成時に文字セットと比較規則が指定されていない場合は、サーバー レベルの文字セットと比較規則がデータベースの文字セットと比較規則として使用されます。テーブルの作成または変更のステートメントで文字セットと比較規則が指定されていない場合は、テーブルが配置されているデータベースの文字セットと比較規則が、テーブルの文字セットと比較規則として使用されます。 3つのシステム変数MySQL サーバーは複数のクライアントに対応できます。これらのクライアントのエンコード方式は異なる場合がありますが、データベース内のデータの文字セットは一定です。MySQL は、異なるクライアントに対してエンコード変換処理を実行し、その結果をクライアントに返す必要があります。 MySQL には、上記の操作を実行できる 3 つの SESSION レベルのシステム変数があります。
MySQL サーバーは、各クライアントのセッション レベルでこれら 3 つの変数のコピーを保持します。 しかし、実際の運用環境ではトラブルを避けるため、企業側ではクライアント側がデフォルトで utf8 文字セットを使用するよう規定しているケースが一般的です。 上記はMySQLの文字セットの詳細な概要です。MySQLの文字セットの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード
>>: Dockerスペースがいっぱいでコンテナに入れない場合の解決策
序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...
ベクトル波 <svg viewBox="0 0 560 20" class...
Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...
問題の説明最近、Springbootプロジェクトを構築していたところ、会社のネットワークケーブルに接...
ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...
ルートディレクトリとインデックスファイルroot ディレクティブは、ファイルの検索に使用するルート ...
目次1. ソリューション 1 (UDF)デモケース2. ソリューション2(binlogの解析)キャナ...
このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...
この記事の本文を始める前に、まず ffmpeg プログラムをインストールする必要があります (Lin...
序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...
序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...
コンテナはすでに作成されていますが、その起動パラメータ(データがマウントされる場所)を知る方法 #コ...
目次分割代入を使用したオブジェクトパラメータコールバック関数の命名条件文を説明的にするスイッチ文をM...
目次序文1. 楽観的ロックバージョンフィールドを追加する2. 悲観的ロック読み取りロック完全なテーブ...
目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...