我試圖正確地將utf8mb4字符串存儲到MySQL 5.5.30中。我們正在使用ConnectorJ 5.1.18。MySQL 5.5連接器/ J CharacterSet編碼(utf8mb4)問題
根據文檔的ConnectorJ應自動檢測基於被character_set_server變量的字符編碼...
然而,作爲最好的,我可以告訴它總是默認爲
SET NAMES處理latin1代替SET NAMES utf8mb4
日誌輸出從連接器-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, resultset-id: 4, message: /* mysql-connector-java-5.1.18 (Revision: [email protected]) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR 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' OR 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_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect' Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 0 ms, connection-id: 57, statement-id: 3, resultset-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, resultset-id: 5, message: /* mysql-connector-java-5.1.18 (Revision: [email protected]) */SELECT @@session.auto_increment_increment Sat Jul 06 15:45:20 CDT 2013 INFO: Profiler Event: [FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) duration: 0 ms, connection-id: 57, statement-id: 3, resultset-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, resultset-id: 6, message: 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, resultset-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, resultset-id: 0, message: SET NAMES latin1
的SHOW變量調用的輸出如下:
character_set_client utf8 character_set_connection utf8 character_set_results utf8 character_set_server utf8mb4
服務器正在運行,並且因此更新被character_set_server價值,我只是跑
SET GLOBAL和
SET語句。
更新: 當我更改my.cnf中的character_set_server值並重新啓動我的服務器時,ConnectorJ檢測到utf8mb4完全按照它的設定。
當我使用SET GLOBAL手動設置值時,ConnectorJ繼續使用Latin1。
有人知道爲什麼會這樣嗎?有什麼方法可以更新字符集,使ConnectorJ能夠檢測到,而不必讓mysql脫機?