[Database-MySQL] utf8mb4とutf8の違い

今日、Navicatを使用してデータベースを構築するときに、文字セットを選択できるようにします。これら2つのUTF-8の違いを知りたいと思います。具体的には少しBaiduです。興味があれば、それを見つけることができます。

        MySQLはバージョン5.5.3の後にこのutf8mb4エンコーディングを追加しました。mb4はほとんどのバイト4を意味し、4バイトのUnicodeと互換性を持つように特別に設計されています。実際、utf8mb4はutf8のスーパーセットです。理論的には、もともとutf8が使用され、その後文字セットがutf8mb4に変更されたため、既存のutf8エンコーディングの読み取りで問題が発生することはありません。もちろん、スペースを節約するために、通常はutf8を使用するだけで十分です。

utf8は日常の使用で問題がないので、なぜutf8mb4を使用するのですか?MySQLの下位バージョンでサポートされているutf8エンコーディングの最大文字長は3バイトです。4バイト文字が検出されると、エラーが発生します。

3バイトのUTF-8は、UnicodeのBasic Multitext Plane(BMP)である0xFFFFをエンコードできます。つまり、基本的な多言語プレーンにないUnicode文字は、MySQLの元のutf8文字セットを使用して格納できません。

BMPにないこれらの文字は何ですか?最も一般的なものは、絵文字(絵文字は特別なUnicodeエンコーディングで、一般にiosとandroidの電話で見られます)、一部の一般的ではない中国語の文字、および新しいUnicode文字などです。


理論的には、UTF-8形式は1〜6バイトを使用し、最大31文字をエンコードできます。最新のUTF-8仕様は1〜4バイトのみを使用し、最大21ビットをエンコードできます。これは、17のUnicodeプレーンすべてを表すことができます。UTFエンコードについては、「一般的なエンコードの概要」の記事をご覧ください。

UTF8は、Mysqlの以前のバージョンでサポートされている文字セットであり、Unicodeの基本的なマルチテキストプレーンである、最大3バイトのUTF-8文字のみをサポートしています。これは、MySQLの初期の頃には、基本的な多言語面以外の文字はほとんど使用されていなかったためと考えられます。また、MySQL5.5.3バージョン以降では、4バイトのUTF-8文字をMysqlに保存するために、utf8mb4文字セットを使用できます。たとえば、utf8mb4文字エンコーディングを使用して、絵文字を置き換える代わりに、emoj絵文字を直接格納できます。

互換性を高めるために、utf8の代わりに常にutf8mb4を使用する必要があります実際、phpmyadminの最新バージョンのデフォルトの文字セットはutf8mb4です。CHARタイプのデータの場合、utf8mb4ストレージを使用するとより多くのスペースが消費されることは事実です。

Mysqlの公式推奨によると、CHAR型のデータの場合、utf8mb4はより多くのスペースを消費するため、互換性を向上させるために、常にutf8mb4を使用する必要があります。CHARではなくVARCHARを使用してください。

さらに、Javaサーバーを使用している場合は、mysqlコネクターのバージョンが5.1.13よりも新しいことを確認する必要があります。アップグレードしないと、utf8mb4を使用できません。例外情報

 

org.springframework.jdbc.CannotGetJdbcConnectionException: 
Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: 
Cannot create PoolableConnectionFactory (Unknown initial character set index '224' received from server.
Initial client character set can be forced via the 'characterEncoding' property.)

 

元の28件の記事が公開されました 3のような 訪問40,000+

おすすめ

転載: blog.csdn.net/qq_34291570/article/details/105509012