ホームページ > バックエンド開発 > PHPチュートリアル > utf8とutf8mb4の違いを詳しく解説

utf8とutf8mb4の違いを詳しく解説

coldplay.xixi
リリース: 2023-04-08 21:38:01
転載
7915 人が閲覧しました

utf8とutf8mb4の違いを詳しく解説

utf8 と utf8mb4 の違い

1. はじめに

MySQL は 5.5.3 、mb4 の後にこの utf8mb4 エンコーディングを追加しました。ほとんどのバイト 4 を意味します。これは、4 バイトの Unicode と互換性があるように特別に設計されています。 utf8mb4 は utf8 のスーパーセットであり、エンコードを utf8mb4 に変更する以外に他の変換は必要ありません。もちろん、スペースを節約するには、通常は utf8 を使用するだけで十分です。

2. コンテンツの説明

上で述べたように、utf8 はほとんどの中国語文字を格納できるのに、なぜ utf8mb4 を使用する必要があるのでしょうか? mysql でサポートされている utf8 エンコーディングの最大文字長は 3 であることがわかりました。文字セクションで、4 バイトのワイド文字が見つかった場合は例外が挿入されます。 3 バイト UTF-8 でエンコードできる最大 Unicode 文字は 0xffff で、これは Unicode の Basic Multilingual Plane (BMP) です。言い換えれば、基本的なマルチテキスト プレーンにない Unicode 文字は、Mysql の utf8 文字セットを使用して保存することはできません。絵文字表現 (絵文字は iOS および Android 携帯電話で一般的な特別な Unicode エンコードです)、多くの珍しい漢字、および新しい Unicode 文字など (utf8 の欠点) が含まれます。

通常、コンピュータは文字を保存するとき、さまざまな文字の種類とエンコード方法に応じて記憶領域を割り当てます。例えば、以下のようなエンコード方法です;

①ASCIIエンコードでは、英字1文字(大文字・小文字問わず)は1バイト、漢字1文字は2バイトのスペースを占めます。 2 進数シーケンスは、コンピューターにデジタル単位として保存される場合、通常は 10 進数に変換された 8 ビットの 2 進数になります。最小値は 0、最大値は 255 です。

②UTF-8 エンコードでは、1 つの英語文字は 1 バイトの記憶領域を占有し、1 つの中国語文字 (繁体字中国語を含む) は 3 バイトの記憶領域を占有します。

③Unicode エンコードでは、英語の文字は 2 バイトの記憶領域を占有し、中国語の文字 (繁体字中国語を含む) は 2 バイトの記憶領域を占有します。

④UTF-16 エンコードでは、英語のアルファベット文字または中国語の文字を保存するには 2 バイトの記憶領域が必要です (Unicode 拡張領域内の一部の中国語文字は、保存に 4 バイトが必要です)。

⑤UTF-32 エンコードでは、世界中のあらゆる文字を保存するには 4 バイトの保存スペースが必要です。

utf8 はほとんどの文字と互換性があるのに、なぜ utf8mb4 を拡張する必要があるのでしょうか?

インターネットの発展に伴い、チャット中によく送る小さな黄色い顔の表情である絵文字記号など、多くの新しいタイプのキャラクターが生み出されました。フラットな Unicode 文字のうち、MySQL では utf8 ストレージを使用することができなかったため、MySQL は utf8 文字を拡張し、utf8mb4 エンコーディングを追加しました。

したがって、データベースの設計時にユーザーが特殊シンボルを使用できるようにしたい場合は、データベースの互換性を高めるために、utf8mb4 エンコーディングを使用して特殊シンボルを保存するのが最善ですが、この設計ではより多くの記憶領域が消費されます。 。

推奨チュートリアル: 「初心者からマスターまでのphp

以上がutf8とutf8mb4の違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:liqingbo.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート