MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

参考: MySQL 文字セットの概要

utf8mb4 は MySQL 8.0 のデフォルトの文字セットとなり、MySQL 8.0.1 以降では utf8mb4_0900_ai_ci がデフォルトの照合順序となります。

新しいプロジェクトではutf8mb4のみが考慮されます

UTF-8 エンコーディングは、1 ~ 4 バイトを使用して文字を保存できる可変長エンコーディング メカニズムです。

歴史的な問題により、MySQL の utf8 エンコーディングは真の UTF-8 ではなく、最大長が 3 バイトの切り捨てバージョンです。絵文字や複雑な中国語の文字など、4 バイトを占める UTF-8 エンコードに遭遇すると、ストレージ例外が発生します。

MySQL 5.5.3 以降では、完全な UTF-8 を実装するために utf8mb4 エンコーディングが使用されるようになりました。ここで、mb4 は最大バイト数が 4 であることを意味し、最大 4 バイトを占めます。 8.0 以降、特定のバージョンでは utf8mb4 がデフォルトの文字エンコーディングとして使用されます。

サーバーのデフォルト文字セットをutf8mb4に設定する

データベースを作成するときに文字セットが指定されていない場合は、サーバーのデフォルトの文字セットが使用されます。サーバーのデフォルト文字セットを utf8mb4 に設定すると利便性が向上します。

MySQL設定ファイルを編集する

注意する必要があるのは 5 つのシステム変数だけです。すべてを utf8mb4 に変更すると、変更は成功します。
文字セットクライアント
文字セット接続
文字セットの結果
文字セットサーバー
文字セットデータベース

my.cnfは MySQL の設定ファイルです。変更する前に必ずバックアップしてください。

vi /etc/my.cnf

[mysqld] の下に default-character-set=utf8 を追加した後、不明な理由でサーバーを起動できません。後で次のように変更しました (MySQL 5.7):

[mysqld]
init_connect = '照合接続を utf8mb4_unicode_ci に設定' 
init_connect = '名前をutf8mb4に設定' 
文字セットサーバー=utf8mb4
照合サーバー=utf8mb4_unicode_ci 
文字セットクライアントハンドシェイクをスキップする
...
[クライアント]
デフォルトの文字セット=utf8mb4

MySQL 8.0 のデフォルト設定は utf8mb4 なので、変更する必要はありません。変更する場合、設定ファイルは次のようになります。

[mysqld]
データディレクトリ=/var/lib/mysql
ソケット=/var/lib/mysql/mysql.sock
ログエラー=/var/log/mysqld.log
pidファイル=/var/run/mysqld/mysqld.pid
文字セットサーバー = utf8mb4
[クライアント]
デフォルトの文字セット=utf8mb4

再起動して確認

システム エンコーディング、接続エンコーディング、サーバー エンコーディング、クライアント エンコーディングがすべて UTF-8 に設定されていることがわかります。

mysql> 「%char%」のような変数を表示します。
+--------------------------------------+--------------------------------+
| 変数名 | 値 |
+--------------------------------------+--------------------------------+
| 文字セットクライアント | utf8mb4 |
| 文字セット接続 | utf8mb4 |
| 文字セットデータベース | utf8mb4 |
| 文字セットファイルシステム | バイナリ |
| 文字セット結果 | utf8mb4 |
| 文字セットサーバー | utf8mb4 |
| 文字セットシステム | utf8 |
| 文字セットディレクトリ | /usr/share/mysql-8.0/charsets/ |
| パスワードの検証.特殊文字数 | 1 |
+--------------------------------------+--------------------------------+
セット内の行数は 9 です (0.00 秒)

MySQL の文字セット関連変数

character_set_client: クライアント要求データの文字セット
character_set_connection: クライアントから受信され、その後送信されるデータの文字セット
character_set_database: デフォルト データベースの文字セット。この文字セットは、デフォルト データベースがどのように変更されたかに関係なく使用されます。デフォルト データベースがない場合は、character_set_server で指定された文字セットが使用されます。この変数はシステム自体で管理し、手動で定義しないことをお勧めします。
character_set_filesystem: オペレーティング システム上のファイル名をこの文字セットに変換します。つまり、character_set_client を character_set_filesystem に変換します。デフォルトのバイナリでは、変換は実行されません。
character_set_results: 結果セットの文字セット
character_set_server: データベースサーバーのデフォルトの文字セット
character_set_system: システムメタデータを保存するために使用される文字セット。常にutf8。設定する必要はありません。

データベースを作成するときは、文字セットをutf8mb4として指定します。

データベースのデフォルトの文字セットが utf8mb4 でない場合は、データベースの作成時に文字セットを指定できます。

データベース mydb を作成し、文字セット utf8mb4 を utf8mb4_unicode_ci に照合します。

照合

保存に加えて、文字をソートしたり比較したりする必要もあります。 utf8mb4_unicode_ci の使用が推奨されますが、utf8mb4_general_ci を使用しても問題ありません。

MySQL 8.0 のデフォルト値は utf8mb4_0900_ai_ci であり、これは utf8mb4_unicode_ci の一種です。具体的な意味は次のとおりです。

  • uft8mb4 は、UTF-8 エンコード方式を使用し、各文字が最大 4 バイトを占めることを意味します。
  • 0900 は Unicode 照合アルゴリズムのバージョンを表します。 (Unicode 照合アルゴリズムは、Unicode 標準の要件に準拠した 2 つの Unicode 文字列を比較する方法です)。
  • ai はアクセントの無感覚を意味します。つまり、ソート時に e、è、é、ê、ë の間に違いはありません。
  • ci は大文字と小文字を区別しないことを意味します。つまり、ソート時に p と P の間に違いはありません。

utf8mb4 がデフォルトの文字セットとなり、MySQL 8.0.1 以降では utf8mb4_0900_ai_ci がデフォルトの照合順序となります。以前は、utf8mb4_general_ci がデフォルトの照合でした。 utf8mb4_0900_ai_ci 照合がデフォルトの照合になったため、新しいテーブルではデフォルトで基本多言語面外の文字を格納できるようになりました。絵文字をデフォルトで保存できるようになりました。アクセントと大文字と小文字の区別が必要な場合は、代わりに utf8mb4_0900_as_cs を使用できます。

要約する

これで、MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci に関するこの記事は終了です。MySQL エンコーディング utf8 および utf8mb4 に関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  Linuxシステムにおける仮想デバイスファイルのさまざまな実用的な使用法の詳細な説明

>>:  Elementのメッセージポップアップウィンドウが繰り返しポップアップする問題の解決

推薦する

CSS のサイズ単位についての簡単な説明

ブラウザの互換性はどんどん良くなってきています。モバイル端末は基本的にすべてWebKitベースです。...

Pythonの関数知識についての簡単な説明

目次関数パラメータの2つの主要なカテゴリ位置パラメータ可変長パラメータ名前空間要約する関数パラメータ...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

jQuery をベースにリスト ループ スクロールを実装するためのヒント (超簡単)

良いアイデアを見つけたので記録しました。私は以前、スクロール効果を実現するためにjQueryを使用し...

CSS3で作成した画像スクロール効果

成果を達成する実装コードhtml <base href="https://s3-us...

MySQLデータベースで列を追加、削除、変更する方法

この記事では、例を使用して、MySQL データベースの列を追加、削除、および変更する方法について説明...

Docker ベースの Selenium 分散環境の構築

1.画像をダウンロードするdocker pull selenium/hub docker pull ...

ウェブデザイナーのための超便利なツール 50 選

ウェブデザイナーになるのは簡単ではありません。デザインやアーキテクチャを考慮するだけでなく、さまざま...

Vue の this.$router と this.$route の違いと push() メソッド

公式文書には次のように記されている。ルーターを挿入することで、どのコンポーネントでも this.$r...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

MySQL トリガー: トリガーの作成と使用

この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

MySQLファイルストレージの詳細な説明

ファイルシステムとは何かInnoDB や MyIASM などのストレージ エンジンはテーブルをディス...

ES6分解課題の原理と応用

目次配列分割代入オブジェクトの分解代入分割割り当ての適用変数の値の交換関数から複数の値を返すマップ構...

Vueコンポーネントの基本のまとめ

コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...