ホームページ >データベース >mysql チュートリアル >MySQL で UTF-8 エンコーディングを使用しない理由

MySQL で UTF-8 エンコーディングを使用しない理由

步履不停
步履不停オリジナル
2019-06-19 14:01:042494ブラウズ

MySQL で UTF-8 エンコーディングを使用しない理由

MySQL UTF-8 エンコーディング

MySQL はバージョン 4.1、つまり 2003 年から UTF-8 をサポートしています。しかし、現在普及している UTF-8 標準 (RFC 3629) が規定されたのはそれ以降です。このため、MySQL の UTF-8 は日常の開発で使用される UTF-8 と矛盾しており、いくつかの問題が発生しています。 MySQL の UTF-8 は 1 文字あたり最大 3 バイトのみをサポートしますが、真の UTF-8 は 1 文字あたり最大 4 バイトまでサポートします。

#問題の再現

##次のようなデータベース テーブルがあります: utf8 エンコード方式

データベース内のレコードに移動します:

@Test public void testInsert() {     User user = new User();     user.setUsername("\uD83D\uDE00 ");     user.setPassword("123456");     userRepo.save(user); }

これはコードの一部です。理解できなくても問題ありません。これは、ユーザー テーブルにレコードを挿入するためのものです。ユーザー名は \uD83D\uDE00 です。 下载 (2).jpg

実際には、\uD83D\uDE00 は絵文字表現です。

MySQL の utf8 文字セットは、3 バイトの UTF-8 エンコードの Unicode 範囲のみをサポートしており、絵文字は 4 バイトのエンコード部分に属しているため、プログラムは実行される予定です。エラーが報告されました。次のコードを実行します。

MySQL で UTF-8 エンコーディングを使用しない理由

# 予想通り、エラーが報告されます。

問題を解決するMySQL で UTF-8 エンコーディングを使用しない理由

MySQL の UTF-8 には欠陥がありますが、MySQL (mariadb を含む) は公式にこのバグを修正せず、代わりに 2016 年に再リリースされた「utf8mb4」を通じて実際のバージョンをサポートしました。 2010。UTF-8。したがって、この問題を解決するには、MySQL データベースを utf8mb4 文字セットに設定するしかありません。

概要

この問題も、データを保存するときに絵文字表現が保存されたために発見されました。実は、私も MySQL を使い始めた頃、utf8mb4 を発見しましたが、UTF8 と UTF8MB4 の違いが分かりませんでした。このレッスンの後、将来 MySQL を使用するときは、素直に文字セットを utf8mb4 に設定するだけです。

MySQL 関連の技術記事の詳細については、

MySQL チュートリアル

列にアクセスして学習してください。

以上がMySQL で UTF-8 エンコーディングを使用しない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。