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 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

innodb_autoinc_lock_mode の表現と値の選択方法についての簡単な説明

前提条件: Percona 5.6 バージョン、トランザクション分離レベルは RR mysql>...

Typescriptを使用してWeChatミニプログラムでプロジェクトを作成する方法

プロジェクトを作成するWeChat開発者ツールでプロジェクトを作成し、言語でTypeScriptを選...

Vue コンポーネントはどのように解析され、レンダリングされるのでしょうか?

序文この記事では、Vue コンポーネントがどのように解析され、レンダリングされるかを説明します。 V...

npmとcnpmを混在させる際の落とし穴の詳細な説明

目次原因理由NPM の紹介: CNPM の紹介:より良い方法方法の改善npm と cnpm を一緒に...

JavaScript の find() メソッドと filter() メソッドの違いのまとめ

目次序文JavaScript find() メソッドJavaScript filter() メソッド...

MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

目次1つのマスターと複数のスレーブのレプリケーションアーキテクチャマルチレベルレプリケーションアーキ...

MySQLインデックスが失敗するいくつかの状況の詳細な分析

1. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)コード値...

jsはシングルクリックでテーブルを変更することを実装します

Pure jsは、参照用にワンクリックで編集可能なテーブル(トランスクリプトに似たもの)を実装してい...

MySQLログシステムの使い方に関する簡単なチュートリアル

目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...

Unicode 署名 BOM の詳細な説明

Unicode 署名 BOM - BOM とは何ですか? BOM は Byte Order Mark...

MySQL の制限ページング最適化ソリューションの実装に関する簡単な説明

MySQL のページングステートメントの使用制限Oracle や MS SqlServer と比較す...

MySQLを定期的にバックアップしてQiniuにアップロードする方法

ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...

Vue ページ スタック マネージャーの詳細

目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...