この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 27972|答える: 0

[出典] MySQLにおけるUTF8とUTF8mb4の違い

[リンクをコピー]
2021年4月21日 18:01:22に投稿 | | | |
未知の文字セット:utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. はじめに

MySQLは5.5.3以降にこのutf8mb4エンコーディングを追加しました。これはほとんどのバイト4を意味し、特に4バイトのUnicodeとの互換性を目的に使われています。 幸いにも、utf8mb4はutf8のスーパーセットであり、他の変換は不要で、符号化をutf8mb4に変更するだけです。 もちろん、容量を節約するためには、一般的にはutf8を使うだけで十分です。

2. 内容の説明

前述の通り、UTF8はほとんどの中国語文字を保存できるのに、なぜutf8mb4を使うのでしょうか? MySQLでサポートされているUTF8エンコーディングの最大文字長は3バイトで、4バイトの広い文字に遭遇すると例外を挿入します。 UTF-8で符号化される最大3バイトのUnicode文字は0xffffであり、これはUnicodeの基本的な多言語平面(BMP)です。 つまり、基本的なマルチテキスト平面にないUnicode文字は、MySQLのutf8文字セットで保存することはできません。 これには絵文字(絵文字はiOSやAndroidのスマートフォンでよく見られる特別なUnicode符号化)や、あまり使われていない中国語の文字、新しいUnicode文字などが含まれます。

3. 問題の根本原因

元のUTF-8フォーマットは1バイトから6バイトを使用し、最大31文字までエンコードできました。 最新のUTF-8仕様は1〜4バイトのみを使用し、最大21ビットまでエンコード可能で、これは17のUnicode平面すべてを正確に表しています。 UTF8はMySQLの文字セットで、最大3バイトまでのUTF-8文字のみをサポートしており、これはUnicodeの基本的なマルチテキストプレーンです。

なぜMysqlのUTF8は最大3バイトのUTF-8文字しかサポートしないのでしょうか? Mysqlが最初に開発されたとき、Unicodeには補助プレーンがなかったから考えました。 当時、ユニコード委員会はまだ「65,535文字で世界中に十分だ」という夢を見ていました。 Mysqlの文字列長はバイトではなく文字数をカウントし、CHARデータ型の場合は文字列が十分に長くなければなりません。 utf8文字セットを使用する場合、保存すべき長さはutf8の最長文字長に文字列長を掛けたものなので、最大utf8の長さを3に制限するのが自然です。例えば、CHAR(100) Mysqlは300バイトを保持します。 以降のバージョンが4バイトのUTF-8文字をサポートしない理由については、一つは後方互換性のため、もう一つは基本的な多言語平面以外の文字がほとんど使われないからだと思います。

Mysqlで4バイトのUTF-8文字を保存するにはutf8mb4文字セットが必要ですが、バージョン5.5.3以降のみサポートされます(バージョン:select version(参照)。 )。 互換性を高めるためには、常にutf8ではなくutf8mb4を使うべきだと思います。  CHAR型データの場合、utf8mb4はより多くの容量を消費し、公式のMysql推奨によるとCHARではなくVARCHARを使うべきです。







先の:ORMフレームワークSqlSugarの簡単な使い方
次に:HTTPリクエストヘッダーExpectについても詳細に説明されています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com