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

推薦する

ZFS とは何か? ZFS を使用する理由とその機能

ZFSの歴史Z ファイル システム (ZFS) は、2001 年に Matthew Ahrens と...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

K3s 入門ガイド - Docker で K3s を実行するための詳細なチュートリアル

k3dとは何ですか? k3d は、Docker で K3s クラスターを実行するための小さなプログ...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

CSS でのフィルタープロパティの使用に関する詳細な説明

フィルター属性は要素の視覚効果を定義しますぼかし画像にガウスぼかしを適用します。 「半径」の値は、ガ...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

vue-router を遅延ロードする 3 つの方法のまとめ

遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...

MySQL マスタースレーブ同期メカニズムと同期遅延問題追跡プロセス

序文DBA として、仕事中に MySQL マスターとスレーブの同期遅延の問題に遭遇することがよくあり...

Linux で at および cron スケジュールタスクをカスタマイズする方法

Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...

Linux での MySQL のアンインストールとインストールのグラフィック チュートリアル

ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...

Centos7にTenda U12ワイヤレスネットワークカードドライバーをインストールする際の問題を解決する

解決プロセス:方法1: CentOS7.3 のデフォルトのカーネル バージョンは低く、3.10.0-...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...

Docker ポート マッピングと外部アクセス不可の問題

Docker コンテナはサービスを提供し、ポート 8888 をリッスンします。外部からアクセスできる...

Docker可視化管理ツールであるDocker UIの使用

1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...