データベース格納emojiエラー:Incorrect string value:´xF 0x 9 Fx A 4x A 3xE 3x 80...´ for column xxx


問題の説明


データベースにemojiの表情を格納するときにエラーが表示されました:Incorrect string value: '\xF0\x9F\xA4\xA3\xE3\x80...' for column 'content' at row 1

の原因となる


データベースがutf-8符号化フォーマットを使用している場合、デフォルトでは3バイトが1単位で符号化され、emoji表情は4バイト1単位で符号化されるため、この4バイトで表すemoji表情(正確にはUnicode文字)が遮断され、格納されないエラーが発生する

解決策


解決方法1


①、データベースのデフォルト文字セットをutf 8 mb 4に設定する
ALTER DATABASE   CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

②、データテーブルの文字セットをutf 8 mb 4に設定
ALTER TABLE   CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

③、データベース接続先の変更
アドレスを削除したuseUnicode=true&characterEncoding=utf-8例えば私の住所はjdbcです.mysql://000.000.000.000:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCでjdbcに変更します.mysql://000.000.000.000:3306/demo?useSSL=true&serverTimezone=UTCすぐ

解決方法2


サードパーティjarパッケージによる変換
インポート:
<dependency>
	<groupId>com.github.binarywanggroupId>
	<artifactId>java-emoji-converterartifactId>
	<version>0.1.1version>
dependency>

コードの変換:
private EmojiConverter emojiConverter = EmojiConverter.getInstance();
emojiConverter.toAlias( );