![MySQL で UTF-8 エンコーディングを使用しない理由](https://img.php.cn/upload/article/000/000/038/5d09ced7abd2b498.png)
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 です。 ![1560923995566673.jpg 下载 (2).jpg](https://img.php.cn/upload/image/645/191/604/1560923995566673.jpg)
実際には、\uD83D\uDE00 は絵文字表現です。
MySQL の utf8 文字セットは、3 バイトの UTF-8 エンコードの Unicode 範囲のみをサポートしており、絵文字は 4 バイトのエンコード部分に属しているため、プログラムは実行される予定です。エラーが報告されました。次のコードを実行します。
![1560924024566619.jpg MySQL で UTF-8 エンコーディングを使用しない理由](https://img.php.cn/upload/image/760/711/372/1560924024566619.jpg)
# 予想通り、エラーが報告されます。
問題を解決する![1560924025726423.jpg MySQL で UTF-8 エンコーディングを使用しない理由](https://img.php.cn/upload/image/590/888/505/1560924025726423.jpg)
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 サイトの他の関連記事を参照してください。