MySQL で絵文字表現を挿入できない理由と解決策

MySQL で絵文字表現を挿入できない理由と解決策

失敗のシナリオ

MySQL データベースに絵文字表現を挿入するために JDBC を呼び出すと、例外java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x9B'がスローされます。

失敗の原因

MySQL の utf8 エンコーディングの文字は最大 3 バイトですが、絵文字表現は 4 バイトであるため、utf8 では絵文字表現の保存はサポートされていません。ただし、utf8 のスーパーセットである utf8mb4 は、文字あたり最大 4 バイトを持つことができるため、絵文字表現の保存をサポートできます。

詳しい紹介を見てみましょう。

解決

1. データベース、テーブル、列の文字セットを変更する

データベースの文字セットを変更する

ALTER DATABASE データベース名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

テーブル文字セットを変更する

ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

列の文字セットを変更する

ALTER TABLE テーブル名 CHANGE フィールド名 フィールド名 フィールドの元のデータ型 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

上記の 3 つのオプションは、実際の状況に応じて変更できます。

2. MySQL設定変数を表示する

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collat​​ion%'; 

character_set_server 変数の値が utf8mb4 と等しいかどうかを確認します。等しくない場合は、手順 3 を参照してください。

3. MySQL設定ファイルを変更する

ここで、mysql は CentOS にインストールされ、構成ファイル名は my.cnf であり、パスはインストールしたディレクトリに基づいています。

vim /etc/my.cnf /etc/mysql/my.cnf 

マイ.cnf

character_set_server を見つけて、その値を utf8mb4 に設定し、保存して終了します。再度挿入してエラーがあるかどうかを確認します。エラーがある場合は、MySQL サービスを再起動する必要があります。

サービスmysqldを再起動

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQLに絵文字表現を保存する詳細な手順
  • MySQL が絵文字表現を保存できない問題の解決策の分析
  • MySQL の絵文字テーブル ストレージのエラーに対処する方法 [エンコードを utf8mb4 に変更]
  • MySQL が絵文字表現を保存できない問題の解決策の分析
  • MySQL に絵文字表現を挿入できない問題の解決方法
  • Java バックエンド MySQL データベースを有効にして絵文字表現をサポートする方法
  • 絵文字を保存するための MySQL の設定方法に関するチュートリアル
  • MySQLに絵文字表現を挿入する方法

<<:  Linux 3.X/4.x/5.x でパゴダ パネルのパスワードを忘れた場合の解決方法

>>:  Vue は better-scroll を使用して水平スクロール方法の例を実現します

推薦する

Linuxでディスクをマウントする方法

仮想マシンを使用しているときに、ディスク容量が不足し、継続使用するためにディスクをマウントする必要が...

Vueでフォーム検証を実装する方法

1. インストールと使用まず、Vue プロジェクトにインストールします。 npm インストール --...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

例を通してMySQLパーティションテーブルの原理と一般的な操作を学びます

1. パーティションテーブルの意味パーティション テーブル定義は、任意のサイズに設定できるルールに従...

Vue3 のウォッチの使用方法とベストプラクティスガイド

目次序文🌟 1. APIの紹介2. 複数のデータソースの監視3. リスニングアレイ4. 監視対象5....

マークアップ言語 - 簡略化されたタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

nginx と keepalived を組み合わせて高可用性を実現するための手順を完了する

序文システムの高可用性を満たすためには、通常、クラスターを構築する必要があります。ホストがクラッシュ...

ミニプログラムでマインドマップを描く方法

目次マインドマップとは何ですか? F6で描く方法アリペイ微信要約するマインドマップとは何ですか?マイ...

IIS7 IIS8 リバースプロキシルールの記述、インストール、構成方法

目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...

Chrome をクラッシュさせる CSS コードの行

一般的な CSS コードでは、UI レイアウトや互換性に関して軽微な問題が発生するだけです。しかし、...

JavaScript の parseInt() の魔法についての簡単な説明

原因このブログを書いた理由は、今日Leetcodeの日課問題をやっていたからです。文字列を整数(at...

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主...

mysql を解決: エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: NO/YES)

1. 問題時々Mysqlにログインしてパスワードを入力すると、この状況が発生しますmysql -u...

Dockerコンテナの操作手順の概要と詳細説明

1. コンテナを作成して実行するdocker run -it --rm centos:latest ...

MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

問題: MySQLテーブル内の自動増分IDのオーバーフローによりビジネスブロックが発生した背景: t...