web-dev-qa-db-ja.com

MySQL WorkbenchおよびJDBCのutf8mb4

私は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です

ありがとう!

9
motagirl2

最後に、それは動作します。ストアドプロシージャの問題であり、移行後もutf8mb4ではなくutf8のままでした。これは2段階のソリューションでした。

  1. @ mike-adamenkoが示唆するように、my.cnfに次のように設定します

[クライアント] default-character-set = utf8mb4

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

[mysqld]文字セットクライアントハンドシェイク= FALSE文字セットサーバー= utf8mb4照合サーバー= utf8mb4_unicode_ci

  1. Mysqlで実行します。

    名前の設定utf8mb4 COLLATE utf8mb4_unicode_ci;

  2. 関連するプロシージャを削除し、再度作成します。それらはutf8mb4にあります。で確認できます

SHOW PROCEDURE STATUSここで、名前LIKE 'procedure_name';

6
motagirl2

使用する 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

こちら をご覧ください

5
Mike Adamenko

MySQL Connector/J 5.1.47以降、

接続文字列のcharacterEncodingにUTF-8が使用される場合、MySQL文字セット名utf8mb4にマップされます。

ドキュメントを確認できます こちら

3
Alaa Nassef

問題を解決するには、MySQLで利用可能なドキュメントに従ってください。 MySQLドキュメント を参照してください。

基本的に、あなたのALTER TABLEスクリプトは、上記のドキュメントに従って変更できます。変更を有効にするには、接続文字列で次のパラメーターを使用できます。

jdbc:mysql://localhost/yourdatabasename?useUnicode=true&characterEncoding=UTF-8

文字セットとエンコーディングの変更を行った後、MySQLサービスを再起動することを忘れないでください。

2
N00b Pr0grammer