絵文字と問題解決のための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でファイルを削除してもスペースが解放されない問題の対処方法

推薦する

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

Linux システム構成 (サービス制御) の詳細な紹介

目次序文1. システムサービス制御1. システムctl 2. ターゲット3. 共通システムサービス4...

HTML 5.1 学習: 14 の新機能とアプリケーション例

序文ご存知のとおり、HTML5 はインターネット コミュニティ全体に標準を提供する組織である Wor...

MySQL デュアルマシン ホットスタンバイ実装ソリューション [テスト可能]

目次1. コンセプト2. 環境の説明3. マスタースレーブホットスタンバイ実装1. コンセプト1. ...

WindowsでcmdからDOSウィンドウに入り、MySQLデータベースにアクセスします。

1. win + R を押して cmd と入力し、DOS ウィンドウに入ります。 2. MySQL...

MySQLのネストされたトランザクションで発生する問題

MySQL はネストされたトランザクションをサポートしていますが、それを実行する人は多くありません....

MySQL 8.0 Windows zip パッケージ版の詳細なインストール手順

MySQL 8.0 Windows zipのインストール手順は次のように紹介されています。準備する:...

CSS で中空効果を実装するサンプルコード

効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...

Vue3 Vue イベント処理ガイド

目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...

MySQL全文インデックスの原理と欠点

MySQL フルテキスト インデックスは、特定のテーブルの特定の列に表示されるすべての単語のリストを...

モバイル端末におけるビューポートの具体的な使用法についての簡単な説明

目次1. 基本概念1.1 2種類のピクセル1.2 3つのビューポート2. ビューポート設定3. 1回...

Linux で CPU 使用率が高くなる原因をトラブルシューティングするプロセスの詳細な説明

目次序文始めるステップトラブルシューティング序文CPU 使用率が高くなるのは、オンラインでよくある問...

入力ファイルの制御と美化について

一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...