【发布时间】:2013-07-04 15:06:54
【问题描述】:
我正在尝试将 utf8mb4 字符串正确存储到 MySQL 5.5.30 中。我们正在使用 ConnectorJ 5.1.18。
根据文档,ConnectorJ 应该根据 character_set_server 变量自动检测字符编码...
但是,据我所知,它始终默认为
SET NAMES latin1 而不是 SET NAMES utf8mb4
connector-j profiler 的日志输出:
2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:[QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间:1 毫秒,连接 ID:57,语句 ID:3,结果集ID:4,消息:/ * mysql-connector-java-5.1.18(修订版:tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq)*/显示变量,其中变量名='语言'或变量名='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' 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:java.sql.DriverManager.getConnection(DriverManager.java:579) 处的 [FETCH] 持续时间:0 毫秒,连接 ID:57,语句 ID:3,结果集ID:4 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:[QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间:0 毫秒,连接 ID:57,语句 ID:3,结果集ID:5,消息:/* mysql-connector-java-5.1.18(修订:tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq)*/SELECT @@session.auto_increment_increment 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:java.sql.DriverManager.getConnection(DriverManager.java:579) 处的 [FETCH] 持续时间:0 毫秒,连接 ID:57,语句 ID:3,结果集ID:5 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:[QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间:0 毫秒,连接 ID:57,语句 ID:4,结果集 ID:6,消息:显示排序 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:java.sql.DriverManager.getConnection(DriverManager.java:579) 处的 [FETCH] 持续时间:3 毫秒,连接 ID:57,语句 ID:4,结果集ID:6 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:[QUERY] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间:1 毫秒,连接 ID:57,语句 ID:999,结果集 ID:0,消息:SET NAMES latin1SHOW VARIABLES 调用的输出如下:
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 脱机?
【问题讨论】:
标签: mysql utf8mb4 connector-j