web-dev-qa-db-ja.com

MySQLのutf8mb4とutf8の文字セットの違いは何ですか?

MySQL utf8mb4utf8文字セットの違いは何ですか?

_ ascii _ UTF-8 UTF-16 および UTF-32 のエンコーディングについては既に知っています。しかし、utf8mb4グループのエンコーディングと MySQL Server で定義されている他のエンコーディングタイプとの違いを知りたいのですが。

utf8mb4ではなくutf8を使用することによる特別な利点/提案はありますか?

252

UTF-8 は可変長エンコーディングです。 UTF-8の場合、これは1つのコードポイントを格納するために1から4バイトが必要であることを意味します。しかし、MySQLの "utf8"( "utf8mb3"の別名)と呼ばれるエンコーディングは、コードポイントあたり最大3バイトしか格納できません。

そのため、文字セット "utf8"/"utf8mb3"はすべてのUnicodeコードポイントを格納することはできません。それは " 基本多言語面 "と呼ばれる0x000から0xFFFFまでの範囲のみをサポートします。 Unicodeエンコーディングの比較 も参照してください。

これは(同じページの前のバージョン) MySQLのドキュメント がそれについて言わなければならないものです:

Utf8 [/ utf8mb3]という名前の文字セットは、1文字あたり最大3バイトを使用し、BMP文字のみを含みます。 MySQL 5.5.3以降、utf8mb4文字セットは1文字あたり最大4バイトを使用して補助文字をサポートします。

  • BMP文字の場合、utf8 [/ utf8mb3]とutf8mb4は、同じコード値、同じエンコーディング、同じ長さのストレージ特性を持ちます。

  • 補助文字の場合、utf8 [/ utf8mb3]はその文字を格納できません、utf8mb4は格納するのに4バイトを必要とします。utf8[/ utf8mb3]はその文字を格納できないため、補助文字はありません。また、古いバージョンのMySQLからutf8 [/ utf8mb3]データをアップグレードするときに、文字の変換やデータの損失について心配する必要はありません。

そのため、 emoji のように、BMPの外側にある文字を格納することをカラムでサポートする場合(および通常は使用する場合)、 "utf8mb4"を使用します。 実際に使用される最も一般的な非BMP Unicode文字は何ですか? も参照してください。

298
CodeCaster

utf8mb4文字セットは、言語文字だけでなく記号、新しく導入された絵文字などを格納するためのサポートが今日必要なので便利です。

MySQLデータベースで完全なUnicodeをサポートする方法 Mathias Bynensによると、この点についてもある程度の説明があります。

43
Jimmy Kane

MySQL 8.0リファレンスマニュアルから抜粋

  • utf8mb4 1〜4バイト を使用したUnicode文字セットのUTF-8エンコーディング。

  • utf8mb3 1〜3バイト を使用したUnicode文字セットのUTF-8エンコーディング。

MySQLutf8は現在utf8mb3のエイリアスであり、 は非推奨 で、将来の{MySQLリリースで削除される予定です。その時点でutf8utf8mb4への参照になります。

そのため、このエイリアスに関係なく、意識的に自分自身でutf8mb4エンコーディングを設定できます。

15
simhumileco