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のメッセージポップアップウィンドウが繰り返しポップアップする問題の解決

推薦する

Linux でメモリ使用量を確認する方法

システムの問題、アプリケーションの速度低下、または原因不明の問題をトラブルシューティングする場合、最...

vscodeでnpmを使用してbabelをインストールする方法

序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...

ログインボックスのメールプロンプトを実装するネイティブJS

この記事では、登録またはログイン時に電子メール アドレスを入力する際のドロップダウン プロンプトのネ...

JavaScript でプライベート変数を宣言する 2 つの方法

序文JavaScript は、キーワードを使用してプライベート変数を宣言できる他の言語とは異なります...

MySQL で 2 つのデータベース テーブル構造を比較する方法

開発およびデバッグのプロセスでは、新しいコードと古いコードの違いを比較する必要があります。比較には、...

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

Pycharm2017はpython3.6とmysqlの接続を実現します

この記事では、pycharm2017でpython3.6とmysqlを接続する方法を参考までに紹介し...

Chromeブラウザの自動パスワード保存プロンプト機能を無効にする方法

注: Web 開発では、フォームに autocomplete="off" を追加...

MySQLの詳細な説明Explain

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

CSSスコープ(スタイル分割)の使用の概要

1. CSSスコープの使用(スタイル分割) Vue では、CSS スタイルを現在のコンポーネントでの...

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ...

MySQLはデフォルトのエンジンと文字セットの詳細を変更します

目次1. データベースエンジン1.1 ビューデータベースエンジン1.2 デフォルトのデータベースエン...

MySQL マルチテーブルクエリの詳細な説明

よく食べて十分に休息を取るというのは簡単なことのように思えますが、実際に実行するのはそれほど簡単では...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...