ホームページ >バックエンド開発 >PHPの問題 >わかりやすい! utf8とutf8mb4の違い

わかりやすい! utf8とutf8mb4の違い

silencement
silencement転載
2020-01-25 00:14:035537ブラウズ

わかりやすい! utf8とutf8mb4の違い

1. はじめに

MySQL は 5.5.3 以降 utf8mb4 エンコーディングを追加しました。mb4 はほとんどのバイト 4 を意味し、4 バイトの unicode と互換性を持つように特別に設計されています。 utf8mb4 は utf8

のスーパーセットです。エンコードを utf8mb4 に変更する以外、他の変換は必要ありません。もちろん、スペースを節約するには、通常は utf8 を使用するだけで十分です。

2. コンテンツの説明

上で述べたように、utf8 はほとんどの中国語文字を格納できるのに、なぜ utf8mb4 を使用する必要があるのでしょうか? mysql でサポートされている utf8 エンコーディングの最大文字長は 3 であることがわかりました。

などのcharacters.セクションでは、4バイトのワイド文字が見つかった場合に例外が挿入されます。 3 バイト UTF-8 でエンコードできる最大 Unicode 文字は 0xffff で、これは Unicode の Basic Multilingual Plane (BMP) です。言い換えれば、基本的なマルチテキスト プレーンにない Unicode 文字は、Mysql の utf8 文字セットを使用して保存することはできません。絵文字表現 (絵文字

は特別な Unicode エンコーディングであり、iOS や Android 携帯電話で一般的です)、多くの珍しい漢字、および新しい 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 エンコーディングを使用してそれを保存するのが最善ですが、この設計では

結果的にコストが増加する 保管スペースがたくさんある。

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

声明:
この記事はwww.liqingbo.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。