MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

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

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

問題の再現

データベーステーブルは次のとおりです: utf8 エンコード

データベースにレコードを追加します。

@テスト
パブリックボイドテスト挿入() {
 ユーザー user = new User();
 ユーザー名を設定します。
 ユーザー.setPassword("123456");
 userRepo.save(ユーザー);
}

以下はコードの一部です。理解できなくても問題ありません。以下は、ユーザー テーブルにレコードを挿入するコードです。ユーザー名は\uD83D\uDE00です。

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

MySQL の utf8 文字セットは 3 バイト UTF-8 エンコーディングの Unicode 範囲のみをサポートし、絵文字は 4 バイト エンコーディング部分に属するため、プログラムは期待どおりに実行するとエラーを報告します。次のコードを実行します:

予想通り、エラーが報告されました。

問題を解決する

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

要約する

この問題は、データを保存するときに絵文字表現が保存されたために発見されました。実は、MySQLを使い始めたときにutf8mb4を発見したのですが、UTF8とUTF8MB4の違いがわかりませんでした。この教訓を踏まえて、今後MySQLを使用するときは文字セットをutf8mb4に設定することにします。

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースで UTF-8 エンコードを設定する方法
  • MySQL GBK → UTF-8 エンコーディング変換
  • MySQL では UTF-8 が推奨されないのはなぜですか?

<<:  LinuxでJenkinsのパスワードを忘れる方法

>>:  WeChat アプレット ピッカー マルチ列セレクター (モード = multiSelector)

推薦する

MySQL の準同期レプリケーションについての簡単な説明

導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...

Nexus をベースに Alibaba Cloud プロキシ ウェアハウスを構成するプロセスの分析

Nexus のデフォルトのリモートリポジトリは https://repo1.maven.org/ma...

Rails APIを使用してReactアプリケーションを構築するための詳細な手順

目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

HTMLでアンカーの位置を設定するためのいくつかの一般的な方法

HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...

js キャンバスで円形の水のアニメーションを実現

この記事の例では、円形の水のアニメーションを実現するためのキャンバスの具体的なコードを参考までに共有...

Webフロントエンド開発コース Webフロントエンド開発ツールとは

インターネット技術の発展に伴い、ユーザーはますます Web ページに依存するようになり、Web フロ...

Docker-compose は Docker プライベート ウェアハウスのステップを迅速に構築します

docker-compose.ymlを作成し、次の内容を入力します。 バージョン: '3&#...

MySQL 上級学習インデックスの長所と短所、使用ルール

1. インデックスの利点と欠点利点: 高速検索、高速グループ化および並べ替えデメリット: ストレージ...

MySQL データベース 8 - データベース内の関数の適用の詳細な説明

データベースの組み込み関数の使用この記事では、主に日付関数、文字列関数、数学関数など、データベースの...

Linux で cmake を使用して MySQL をコンパイルおよびインストールするための詳細なチュートリアル

1. cmakeをインストールする1. cmakeの圧縮パッケージを解凍する [root@mysql...

MySQL スケジュールタスクの実装と使用例

この記事では、例を使用して、MySQL スケジュール タスクの実装と使用方法を説明します。ご参考まで...

HTML 5のドラフトは正式な標準にはならなかった

<br />昨日、W3C で新しいHTML 5 ドラフト (ワーキング ドラフト) が ...

HTML でよく使用されるエスケープ文字の概要

HTML でよく使用されるエスケープ文字をまとめると次のようになります。 &nbsp; 改行...

openlayers6 マップオーバーレイの一般的な 3 つの用途 (ポップアップウィンドウマーカーテキスト)

目次1. 前に書く2. ポップアップウィンドウを実装するためのオーバーレイ2.1 vueページのad...