我正在尝试将 utf8mb4 字符串正确存储到 MySQL 5.5.30 中。我们使用的是 ConnectorJ 5.1.18。
根据文档,ConnectorJ 应该根据 character_set_server 变量自动检测字符编码...
但是,据我所知,它始终默认为
SET NAMES latin1 而不是 SET NAMES utf8mb4
连接器-j 分析器的日志输出:
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' 或 Variable_name = 'init_connect'初始化连接'初始化连接' 2013 年 7 月 6 日星期六 15:45:20 CDT 信息:分析器事件:[FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间: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 信息:分析器事件:[FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间: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 信息:分析器事件:[FETCH] at java.sql.DriverManager.getConnection(DriverManager.java:579) 持续时间: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 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。
有人知道为什么会这样吗?有没有办法以 ConnectorJ 检测到的方式更新字符集,而不必让 mysql 脱机?