違いは何であるutf8mb4
とutf8
で文字セットMySQLは?
ASCII、UTF-8、UTF-16、UTF-32エンコーディングについてはすでに知っています。しかしutf8mb4
、MySQLサーバーで定義されている他のエンコードタイプとのエンコードグループの違いを知りたいです。
utf8mb4
ではなく使用することの特別な利点/提案はありutf8
ますか?
違いは何であるutf8mb4
とutf8
で文字セットMySQLは?
ASCII、UTF-8、UTF-16、UTF-32エンコーディングについてはすでに知っています。しかしutf8mb4
、MySQLサーバーで定義されている他のエンコードタイプとのエンコードグループの違いを知りたいです。
utf8mb4
ではなく使用することの特別な利点/提案はありutf8
ますか?
回答:
UTF-8は可変長エンコーディングです。UTF-8の場合、これは1つのコードポイントを格納するために1〜4バイトが必要であることを意味します。ただし、「utf8」(別名「utf8mb3」)と呼ばれるMySQLのエンコーディングは、コードポイントごとに最大3バイトのみを格納します。
したがって、文字セット "utf8" / "utf8mb3"は、すべてのUnicodeコードポイントを格納できません。これは、「Basic Multilingual Plane」と呼ばれる0x000から0xFFFFの範囲のみをサポートします。Unicodeエンコーディングの比較も参照してください。
これは、(同じページの前のバージョンの)MySQLドキュメントがそれについて述べなければならないことです:
utf8 [/ utf8mb3]という名前の文字セットは、文字ごとに最大3バイトを使用し、BMP文字のみを含みます。MySQL 5.5.3以降、utf8mb4文字セットは文字ごとに最大4バイトを使用し、補助文字をサポートします。
BMP文字の場合、utf8 [/ utf8mb3]とutf8mb4のストレージ特性は同じです。同じコード値、同じエンコーディング、同じ長さです。
補助文字の場合、utf8 [/ utf8mb3]は文字をまったく格納できませんが、utf8mb4は文字を格納するために4バイトを必要とします。utf8 [/ utf8mb3]は文字をまったく格納できないため、utf8 [/ utf8mb3]列に補助文字がなく、古いバージョンのutf8 [/ utf8mb3]データをアップグレードするときに文字の変換やデータの損失について心配する必要はありません。 MySQL。
したがって、絵文字など、BMPの外側にある文字の格納を列でサポートしたい場合(そして通常はそうしたい場合)は、「utf8mb4」を使用します。参照実際に使用されている最も一般的な非BMP Unicode文字は何ですか?。
utf8mb4
最近は、我々は言語の文字だけでなく、記号、新たに導入された絵文字などだけでなく、を格納するために支える必要があるため、文字セットが便利です。
Mathias Bynensによる「MySQLデータベースで完全なUnicodeをサポートする方法」を読むと、この点に光を当てることができます。
utf8mb4
:文字ごとに1から4バイトを使用するUnicode文字セットのUTF-8エンコード。
utf8mb3
:文字あたり1〜3バイトを使用するUnicode文字セットのUTF-8エンコーディング。
でMySQLの utf8
現在のエイリアスでutf8mb3
いる推奨されていませんし、将来のでは削除されますMySQLのリリース。その時点でutf8
への参照になり utf8mb4
ます。
したがって、このエイリアスに関係なく、意識的にutf8mb4
エンコードを設定できます。
答えを完成させるために、以下の@WilliamEntrikenのコメントを追加します(これもマニュアルから取得しています)。
の意味が曖昧にならないように
utf8
、のutf8mb4
代わりに文字セット参照を明示的に指定することを検討してくださいutf8
。