絵文字と問題解決のためのMySQL/Javaサーバーサポートの詳細な説明

絵文字と問題解決のためのMySQL/Javaサーバーサポートの詳細な説明

この記事では、絵文字用の MySQL Java サーバーのサポートと問題解決方法について説明します。ご参考までに、詳細は以下の通りです。

問題の説明

最下層でキャプチャされたマイクロブログデータはMySQLに保存されます。一部のデータは保存に失敗しました。Tomcatを確認した後、コアエラー情報は次のとおりです。

// 文字セットがサポートされていない場合は例外をスローします
sql.SQLException: 行 1 の列 'CONTENT' の文字列値が正しくありません: '\xF0\x9F\x98\x97\xF0\x9F...'

原因分析

  • MYSQL 5.5より前では、utf8エンコーディングは1〜3バイト、つまりBMP部分のUnicodeエンコーディング領域(基本的に0000〜FFFFの領域)のみをサポートしていました。
  • 絵文字表現は4バイトで、MySQLのutf8エンコーディングは最大3バイトなので、データを挿入することはできません。
  • MySQL 5.5 以降では、4 バイトをサポートできる utf8mb4 エンコーディングが追加されました。つまり、文字は最大 4 文字まで使用できるため、utf8mb4 エンコーディングではより多くの文字セットをサポートできます。
  • したがって、プロジェクトでモバイル製品のユーザーテキストを保存する場合は、DB文字セットをUTF8/GBKなどの従来の文字セットからutf8mb4にアップグレードする必要があります。

【注記】

  • utf8mb4 は utf8 と互換性があり、utf8 よりも多くの文字を表現できます。したがって、DB 文字セットを UTF8 や GBK などの従来の文字セットから utf8mb4 にアップグレードするときに、文字の互換性の問題を心配する必要はありません。

回避策

特別な絵文字をフィルターする

content = content.replaceAll("[\\x{10000}-\\x{10FFFF}]", ""); // 単純で粗雑、人道的ではない

データベース文字セットのアップグレード

1. utf8mb4 でサポートされている MySQL バージョンは 5.5.3 以上です。MySQL がこのバージョンより低い場合は、まずアップグレードしてください。

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

3. MySQL 構成ファイル my.cnf (Windows の場合は my.ini) を変更します。my.cnf は通常、etc/mysql/ ディレクトリにあります。見つけたら、次の 3 つの部分に次の内容を追加します。

[クライアント] デフォルトの文字セット = utf8mb4

[mysql] デフォルトの文字セット = utf8mb4

[mysqld]
文字セットクライアントハンドシェイク = FALSE
文字セットサーバー = utf8mb4
照合サーバー = utf8mb4_unicode_ci
init_connect = '名前をutf8mb4に設定'

4. MySQLを再起動して文字セットを確認する

mysql コマンドラインに次のように入力します:

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

再起動前の文字セット

再起動後の文字セット

【注記】

  • 次のフィールドはutf8mb4である必要があります
    • 文字セットクライアント
    • 文字セット接続
    • 文字セットデータベース
    • 文字セットの結果
    • 文字セットサーバー

上記の 4 つの手順を完了したら、MySQL クライアント navicat を使用して、絵文字表現 ⛄ を手動でテーブルに追加します。正常に保存できれば、データベースが正常にアップグレードされたことを意味します。

これらの文字セット設定の具体的な違いについては、MySQLの文字セット設定の詳細を参照してください。

5. サーバー側のDB構成ファイルを確認する

// Spring を構成するときに使用するリンクは次のとおりです。
url="jdbc:mysql://localhost:3306/gzhou?allowMultiQueries=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&maxReconnects=10"
// characterEncoding=utf8mb4 の場合、データを挿入するときにエラー メッセージが表示されます。原因: java.sql.SQLException: サポートされていない文字エンコーディング 'utf8mb4'
// characterEncoding または characterEncoding=utf8 を削除します

絵文字

Android システムでは、Sogou と Baidu の入力方法に絵文字表現が組み込まれています。

【注記】

システム間で絵文字記号に互換性がない場合は、四角形のみが表示されます。

MySQL 関連のコンテンツに興味のある読者は、次のトピックを確認してください: 「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL mysqladmin クライアントの使用の概要
  • MySQL は対応するクライアント プロセスにどのように接続しますか?
  • MySql クライアントが数秒で終了する問題を解決する (my.ini が見つからない)
  • PHP Swoole 非同期 MySQL クライアント実装例
  • Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する
  • mysql8.0.11クライアントがログインできない問題の解決方法
  • NodeJS サーバー開発入門 (Express+MySQL)
  • アプリケーション サーバー用の MySQL 接続プール (高い同時実行性をサポート)
  • MySQLクライアントとサーバーのプロトコルの解釈

<<:  Vueコンポーネントドキュメント生成ツールライブラリのメソッド

>>:  Linuxでファイルを削除してもスペースが解放されない問題の対処方法

推薦する

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...

MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明

この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...

ウェブサイトのフッター沈下現象に対する3つの解決策を詳しく解説

背景多くのウェブサイトのデザインは、一般的にコンテンツ+フッターの2つの部分で構成されています。コン...

Vue開発の詳細な説明 ソートコンポーネントコード

目次 <テンプレート> <ul class="コンテナ">...

UbuntuにMySQLデータベースをインストールする方法

Ubuntu は、Linux をベースにした無料のオープンソース デスクトップ PC オペレーティン...

Alibaba Cloud Server Ubuntu 設定チュートリアル

Alibaba Cloud のカスタム Ubuntu イメージのインポートには、OSS スナップショ...

JSはjQueryのappend関数を実装します

目次コードを見せてください効果をテストする効果追伸別のアプローチコードを見せてください HTMLEl...

ドラッグ可能で編集可能なガントチャートの詳細な説明(HighchartsはVueとReactで使用できます)

序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...

WeChat アプレットのカスタム スクロール ビューのサンプル コード

ミニプログラムカスタムスクロールビュースクロールバーさっそくレンダリングを見てみましょうレンダリング...

Docker での Jenkins と Docker を使用した継続的デリバリー

1. 継続的デリバリーとは何かソフトウェア製品の出力プロセスは、ソフトウェアがいつでもリリースできる...

jsプロキシの原理の詳細な説明

目次プロキシモードとは何ですか?実例を紹介例を使ってプロキシモデルの定義を理解するプロキシとはget...

MySQL でパーティション分割後にクエリを実装するために MRG_MyISAM (MERGE) を使用する例

大量のデータベース データを最適化することは非常に高度な科学であり、開発者が習得する必要がある専門的...

Python で pymysql モジュールを使用して MySQL データベースに接続する

pymysqlをインストールするpip install pymysql 2|0pymysqlの使用2...

WeChatアプレットが複数行テキストのスクロール効果を実現

この記事の例では、WeChatアプレットで複数行のテキストスクロールを実装するための具体的なコードを...