2

utf8mb4 文字列を MySQL 5.5.30 に適切に格納しようとしています。ConnectorJ 5.1.18 を使用しています。

ドキュメントによると、ConnectorJ は character_set_server 変数に基づいて文字エンコーディングを自動検出する必要があります...

ただし、私が知る限り、常にデフォルトになっています

SET NAMES utf8mb4 の代わりに SET NAMES latin1

connector-j プロファイラーからのログ出力:

Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 1 ms, connection-id: 57, statement-id: 3,結果セット ID: 4、メッセージ: /* mysql-connector-java-5.1.18 (リビジョン: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout'または Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results'または Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_pa​​cket' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' または Variable_name = 'init_connect'init_connect'init_connect'
Sat Jul 06 15:45:20 CDT 2013 INFO: プロファイラー イベント: [FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) 期間: 0 ミリ秒、接続 ID: 57、ステートメント ID: 3、結果セット ID: 4
Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 0 ms, connection-id: 57, statement-id: 3,結果セット ID: 5、メッセージ: /* mysql-connector-java-5.1.18 (リビジョン: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq) */SELECT @@session.auto_increment_increment
Sat Jul 06 15:45:20 CDT 2013 INFO: プロファイラー イベント: [FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) 期間: 0 ミリ秒、接続 ID: 57、ステートメント ID: 3、結果セット ID: 5
Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 0 ms, connection-id: 57, statement-id: 4,結果セット ID: 6、メッセージ: SHOW COLLATION
Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 3 ms, connection-id: 57, statement-id: 4,結果セット ID: 6
Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 1 ms, connection-id: 57, statement-id: 999,結果セット ID: 0、メッセージ: SET NAMES latin1

SHOW VARIABLES 呼び出しの出力は次のとおりです。

character_set_client utf8
character_set_connection utf8
character_set_results utf8
character_set_server utf8mb4

サーバーは現在実行されているため、 character_set_server 値を更新するために単純に実行しました

グローバル設定
設定
ステートメント。

更新: my.cnf の character_set_server 値を変更してサーバーを再起動すると、ConnectorJ は想定どおりに utf8mb4 を検出します。

SET GLOBAL ConnectorJ を使用して手動で値を設定すると、引き続き Latin1 が使用されます。

なぜそうなるのか誰か知っていますか?mysql をオフラインにすることなく、ConnectorJ が検出する方法で文字セットを更新する方法はありますか?

4

1 に答える 1