MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法

MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法

序文

この記事では主に、MySQL ストレージ テーブル エラー「java.sql.SQLException: 文字列値が正しくありません: '\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法を紹介し、参考として共有します。詳細な紹介を見てみましょう。

このプロジェクトは、Spring MVC + MySQL + Druid DataSource に基づいています。絵文字をデータベースに挿入するときにエラー メッセージが表示されます。

java.sql.SQLException: 文字列値が正しくありません: '\xF0\x9F\x92\xA9\x0D\x0A...'

通常の文字は最大 3 バイトを占めるため、utf8 を使用するには十分です。絵文字は 4 バイトを占め、utf8mb4 文字セットを使用して保存する必要があります。このソリューションでは、MySQL サーバーと接続クライアントの 2 か所を変更する必要があります。

MySQL サーバー

以前、MySQL を設定して絵文字を保存する方法についてのチュートリアルを紹介しました。詳細を知りたい場合は、まずそれを参照してください。

サーバー側で、絵文字を保存する必要のあるフィールドを utf8mb4 文字セットを使用するように変更します。

ALTER TABLE mytable MODIFY COLUMN myfiled varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

クライアント

クライアントは接続の文字セットを utf8mb4 に設定する必要があります。

設定は次のとおりです。

名前をutf8mb4に設定します。

Alibaba のオープン ソースの druid データ ソースが使用されます。これには connectionInitSqls というプロパティがあり、物理接続が初期化されるときに実行される SQL を設定するために使用されます。したがって、connectionInitSqls を使用して接続を初期化できます。

Spring は次のように構成されます。

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 <!-- 基本属性 url、user、password -->
 <プロパティ名="url" 値="jdbc:mysql://localhost:3888/majing?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />
 <プロパティ名="ユーザー名" 値="dbusername"/>
 <プロパティ名="パスワード" 値="dbpasswod"/>
 <property name="connectionInitSqls" value="名前をutf8mb4に設定;" />
 <!-- その他の構成 -->
</bean>

dbcp2 や HikariCP などの他のデータベース接続プールには connectionInitSqls 属性があります。

要約する

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

以下もご興味があるかもしれません:
  • MySQL で珍しい文字を挿入できないときの対処方法 (文字列値が正しくない)
  • MySQL が不正な文字列値の例外分析をスローする
  • MySql エラー 列の文字列値が正しくありません
  • MySQL の不正な文字列値の解決方法

<<:  JavaでTomcatサーバーを起動/停止する方法

>>:  JS 非同期コードユニットテストの魔法 Promise

推薦する

VMware15 centos7 ブリッジモード ssh に突然アクセスできなくなる問題を解決する

仮想マシンに独自の LAN IP を持たせたいので、テストを容易にするためにブリッジを使用します。 ...

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...

Linux の高並列性とパフォーマンス最適化の落とし穴の紹介

目次序文Linux アプリケーション実行中に開いているファイルが多すぎる問題の分析と解決Linux ...

JavaScript はドラッグ可能なモーダルボックスを実装します

この記事では、ドラッグ可能なモーダルボックスを実装するためのJavaScriptの具体的なコードを参...

フレックスマルチカラムレイアウトで発生する問題と解決策の詳細な説明

フレックス レイアウトは間違いなくシンプルで使いやすいです。レイアウトをよりシンプルかつ高速にします...

Linux での MySQL 5.6.24 (バ​​イナリ) 自動インストール スクリプト

この記事では、Linux環境でのmysql5.6.24自動インストールスクリプトコードを参考までに共...

MySQL インストール図の概要

MySQL 5.5 のインストールと設定方法のグラフィックチュートリアルMySQL 5.5 のインス...

同じドメイン名を持つ Nginx プロキシのフロントエンドとバックエンドの分離プロジェクトの完全な手順

フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...

ネイティブ JavaScript を使用して計算機のサンプル コードを開発する

計算機の主な機能は数値計算を実行することです。計算機機能の Web インスタンスを開発すると、js ...

HTML の 2 つのタブ ナビゲーション間の競合の解決方法

まず問題の説明から始めましょう:同じページで、1 つのタブに float:left が必要で、もう ...

Zookeeper&Kafka クラスターを構築するための Docker の実装

最近Kafka勉強しています。クラスタの状態をテストする準備をしていたときに、仮想マシンを 3 つ開...

Mysql ファジークエリが大文字と小文字を区別するかどうかの詳細な調査

序文最近、私は小さな個人ブログ プロジェクトを書くのに忙しくしています。 「グローバル検索」機能を実...

2015-2016年に主流となるインタラクティブ体験のトレンド

5月の最も重要なインタラクティブデザイン記事!今年、Baiduのデザイナーは体験の観点から出発し、大...

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

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