1. ホーム
  2. mysql

[解決済み] MySQLのutf8mb4とutf8 charsetsの違いは何ですか?

2022-03-22 08:04:10

質問

とはどのような違いがあるのでしょうか? utf8mb4utf8 の文字セット MySQL ?

については既に知っています。 ASCII , UTF-8 , UTF-16 UTF-32 のエンコーディングです。 の違いは何なのか、気になるところです。 utf8mb4 で定義された他のエンコーディング・タイプとの MySQLサーバー .

を使うことで、何か特別なメリットや提案がありますか? utf8mb4 よりも utf8 ?

解決方法は?

UTF-8 は可変長エンコーディングです。UTF-8の場合、1つのコードポイントを格納するのに1〜4バイトが必要ということです。しかし、MySQL の "utf8" ("utf8mb3" の別名) というエンコーディングは、1 つのコードポイントにつき最大 3 バイトしか保存しません。

つまり、文字セット "utf8"/"utf8mb3" はすべての Unicode コードポイントを格納することができません。 基本多言語面 となります。 参照 Unicodeエンコーディングの比較 .

これは、(同ページの以前のバージョンでの)内容です。 MySQLのドキュメント には、それについて書かれています。

<ブロッククオート

utf8[/utf8mb3]という文字セットは、1文字あたり最大3バイトを使用し、BMP文字のみを含んでいます。MySQL 5.5.3 では、utf8mb4 キャラクタセットが 1 文字あたり最大 4 バイトを使用し、補助的な文字をサポートしています。

  • BMP文字では、utf8[/utf8mb3]とutf8mb4は、同じコード値、同じエンコーディング、同じ長さという同一の保存特性を持っています。

  • 補助文字の場合。 utf8[/utf8mb3]は文字を全く保存できません。 一方、utf8mb4は4バイトで格納する必要があります。utf8[/utf8mb3] は文字を全く保存できないので、utf8[/utf8mb3] カラムに補足文字を持たず、古いバージョンの MySQL から utf8[/utf8mb3] データをアップグレードしても、文字の変換やデータの損失を心配する必要はない。

したがって、BMPの外側にある文字をカラムに格納したい場合(通常はそうしたい)、たとえば、次のようになります。 エモジ は、"utf8mb4" を使用してください。また 実際に使われている非BMPのUnicode文字で最も一般的なものは何ですか? .