架构师_程序员_码农网

ユーザー名 パスワード取得
会員登録

QQ登录

ワンステップ

検索
閲覧:15611|返信: 0
打印 上一主题 下一主题

[情報]mysqlにおけるutf8とutf8mb4の違い

[コピーリンク]
への直接リフト跳转到指定楼层
オーナー
不明な文字セ ッ ト : utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
I. はじめに

MySQLは5.5.3以降にこのutf8mb4エンコーディングを追加した。mb4はmost bytes 4を意味し、4バイトunicodeと互換性があるように特別に設計されている。utf8mb4はutf8のスーパーセットなので、エンコーディングをutf8mb4に変更する以外に他の変換をする必要はない。もちろん、スペースを節約するためには、utf8の一般的な使用で十分です。

次に、コンテンツの記述

とはいえ、utf8でほとんどの漢字を保存できるのだから、なぜutf8mb4を使うのか? オリジナルのmysqlサポートutf8エンコーディングの最大文字長3バイトは、4バイト幅の文字が発生した場合、例外に挿入されます。3バイトのUTF-8でエンコードできるUnicode文字の最大値は0xffffで、これはUnicodeのBMP(Basic Multi-text Plane)です。つまり、Basic Multi-Text Plane にない Unicode 文字は、Mysql の utf8 文字セットを使用して格納することはできません。これには、Emojiの絵文字(Emojiはiosやandroidの携帯電話によく見られる特別なUnicodeエンコーディングです)や、あまり使われていない多くの中国語の文字、新しく追加されたUnicodeの文字などが含まれます。

問題の根本

オリジナルのUTF-8フォーマットは1~6バイトを使用し、最大31ビットの文字をエンコードできた。最新のUTF-8仕様は1~4バイトしか使用せず、最大21ビットをエンコードしますが、これは17のUnicodeプレーンすべてを表現するのに十分な量です。

なぜMysqlのutf8は3バイトまでのUTF-8文字しかサポートしないのでしょうか?しばらく考えていたのですが、おそらくMysqlが最初に開発されたとき、Unicodeにはヘルパープレーンがなかったからだと思います。当時はまだユニコード委員会が「65535文字あれば全世界の文字が足りる」と夢想していた時代で、Mysqlの文字列の長さはバイト数ではなく文字数としてカウントされ、CHARデータ型の場合は文字列の長さを十分に確保する必要があります。utf8文字セットを使用する場合、予約される長さはutf8文字の中で最も長い文字の長さに文字列の長さを掛けたものになります。したがって、utf8の最大長を3に制限することは論理的であり、例えばCHAR(100)の場合、Mysqlは300バイトを予約します。それ以降のバージョンが4バイトのUTF-8文字をサポートしない理由については、後方互換性の問題と、基本的な多言語プレーン以外の文字はほとんど使用されないという事実があると思います。

Mysqlで4バイトUTF-8文字を保存するには、utf8mb4文字セットを使用する必要がありますが、これはバージョン5.5.3以降でのみサポートされています(version: select version();を参照)。CHAR 型のデータについては、utf8mb4 はより多くのスペースを消費するため、Mysql の公式勧告によると、CHAR の代わりに VARCHAR を使用することとしています。







前の記事:ORMフレームワークSqlSugarの簡単な使い方
次の記事:HTTPリクエストヘッダ 詳細
コード農家のネットワークは、唯一の練習の過程で公開され、技術的な困難に遭遇し、他の人を誤解させないでください。
投稿するにはログインが必要です ログイン会員登録

このバージョンのインテグラルルール


免責事項:コードファーマーによって公開されたすべてのソフトウェア、プログラミング教材や記事は、学習や研究目的のために使用されるだけであり、上記のコンテンツは、商業的または違法な目的のために使用してはならない、そうでなければ、すべての結果は、ユーザーの責任でお願いします。このサイトは、ネットワークからの情報、著作権紛争は、このサイトとは何の関係もありません。あなたは完全にダウンロードしてから24時間以内にコンピュータから上記のコンテンツを削除する必要があります。もしこのプログラムが好きなら、正規のソフトウェアをサポートし、登録を購入し、より良い正規のサービスを受けてください。もし著作権侵害があれば、メールでご連絡ください。

メール To:help@itsvse.com

QQ|( 鲁ICP备14021824 号-2)|サイトマップ

GMT+8, 2024-9-19 01:11

クイック返信トップに戻る一覧に戻る