MySQL UTF-8 エンコーディング
##次のようなデータベース テーブルがあります: utf8 エンコード方式
データベース内のレコードに移動します:
@Test public void testInsert() { User user = new User(); user.setUsername("\uD83D\uDE00 "); user.setPassword("123456"); userRepo.save(user); }
これはコードの一部です。理解できなくても問題ありません。これは、ユーザー テーブルにレコードを挿入するためのものです。ユーザー名は \uD83D\uDE00 です。
実際には、\uD83D\uDE00 は絵文字表現です。MySQL の utf8 文字セットは、3 バイトの UTF-8 エンコードの Unicode 範囲のみをサポートしており、絵文字は 4 バイトのエンコード部分に属しているため、プログラムは実行される予定です。エラーが報告されました。次のコードを実行します。
# 予想通り、エラーが報告されます。
問題を解決する
MySQL の UTF-8 には欠陥がありますが、MySQL (mariadb を含む) は公式にこのバグを修正せず、代わりに 2016 年に再リリースされた「utf8mb4」を通じて実際のバージョンをサポートしました。 2010。UTF-8。したがって、この問題を解決するには、MySQL データベースを utf8mb4 文字セットに設定するしかありません。 概要この問題も、データを保存するときに絵文字表現が保存されたために発見されました。実は、私も MySQL を使い始めた頃、utf8mb4 を発見しましたが、UTF8 と UTF8MB4 の違いが分かりませんでした。このレッスンの後、将来 MySQL を使用するときは、素直に文字セットを utf8mb4 に設定するだけです。以上がMySQL で UTF-8 エンコーディングを使用しない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。