私はUTF-8でエンコードされたMySQL DBで作業してきましたが、現在は4バイトの絵文字を保存できる必要があるため、utf8エンコーディングからutf8mb4に変更することにしました。
ALTER DATABASE bstdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE HISTORY CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE HISTORY CHANGE SOURCE_CONTEXT SOURCE_CONTEXT VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Mysql.conf.dの「character-set-server = utf8」を「character-set-server = utf8mb4」に変更しました
これらの手順の後、絵文字を(????)として保存できますが、MySQLコンソールでSQLクエリが実行された場合のみ:MySQL WorkbenchまたはWildfly webappからクエリを起動しようとすると、このエラー:
エラーコード:1366。不正な文字列値:行1の列「SOURCE_CONTEXT」の「\ xF0\x9F\x92\xA2」
クライアントがDBに接続する方法を変更する必要があると思いますが、その方法については手がかりがありません。 JDBCで「useUnicode = yes」を使用することについて読んだことがありますが、機能しません。
$ {bdpath:3306/bstdb?useUnicode = yes}
編集:コメントで示唆されているように、私は試しました:
$ {bdpath:3306/bstdb?characterEncoding = UTF-8}
しかし、運が悪ければ、同じ「不正な文字列値: '\ xF0\x9F\x92\xA2'」エラーが発生します。
また試した
$ {bdpath:3306/bstdb?useUnicode = true&characterEncoding = utf8mb4&}
しかし、接続の確立は拒否します。
MySQLワークベンチおよび/またはJDBC/Wildflyの設定方法に関するアイデアはありますか?
MySQLバージョンは5.7.18です
MySQL WorkBenchのバージョンは6.0.8です
JDBCドライバーのバージョンは5.1.34です
ありがとう!
最後に、それは動作します。ストアドプロシージャの問題であり、移行後もutf8mb4ではなくutf8のままでした。これは2段階のソリューションでした。
[クライアント] default-character-set = utf8mb4
[mysql]デフォルト文字セット= utf8mb4
[mysqld]文字セットクライアントハンドシェイク= FALSE文字セットサーバー= utf8mb4照合サーバー= utf8mb4_unicode_ci
Mysqlで実行します。
名前の設定utf8mb4 COLLATE utf8mb4_unicode_ci;
関連するプロシージャを削除し、再度作成します。それらはutf8mb4にあります。で確認できます
SHOW PROCEDURE STATUSここで、名前LIKE 'procedure_name';
使用する characterEncoding=utf8
jdbc url
jdbc:mysql://x.x.x.x:3306/db?useUnicode=true&characterEncoding=utf8
また、MySQLがutf8mb4
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
こちら をご覧ください
MySQL Connector/J 5.1.47以降、
接続文字列のcharacterEncodingにUTF-8が使用される場合、MySQL文字セット名utf8mb4にマップされます。
ドキュメントを確認できます こちら
問題を解決するには、MySQLで利用可能なドキュメントに従ってください。 MySQLドキュメント を参照してください。
基本的に、あなたのALTER TABLE
スクリプトは、上記のドキュメントに従って変更できます。変更を有効にするには、接続文字列で次のパラメーターを使用できます。
jdbc:mysql://localhost/yourdatabasename?useUnicode=true&characterEncoding=UTF-8
文字セットとエンコーディングの変更を行った後、MySQLサービスを再起動することを忘れないでください。