当前位置: 首页 > 知识库问答 >
问题:

MySQL 5.5连接器/J字符集编码(utf8mb4)问题

上官扬
2023-03-14

根据文档,ConnectorJ应根据character_set_server变量自动检测字符编码...

然而,据我所知,它总是默认

设置名称latin1而不是设置名称utf8mb4

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: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq ) */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: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq ) */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
character_set_client        utf8
character_set_connection    utf8
character_set_results       utf8
character_set_server        utf8mb4
SET GLOBAL
SET

更新:当我更改my.cnf中的character_set_server值并重新启动我的服务器时,ConnectorJ检测到utf8mb4与预期的完全一样。

当我使用set GLOBAL手动设置值时,ConnectorJ继续使用latin1。

有人知道为什么会这样吗?有没有什么方法可以用ConnectorJ会检测到的方式更新字符集,而不必让mysql脱机呢?

共有1个答案

翟俊哲
2023-03-14

我也有类似的问题。ConnectorJ的客户端字符集握手通常使用常规/不完整的UTF8字符集,而不是UTF8MB4

https://dev.mysql.com/doc/relNotes/connector-j/en/news-5-1-13.html

修正自5.1.12版以来发现的错误。连接器/J现在自动检测使用character_set_server=utf8mb4配置的服务器,或处理使用characterencoding=...传递的Java编码utf-8。正如SET names=中的utf8mb4在建立连接时所做的那样。(错误#54175)

 类似资料:
  • 问题内容: 我们有一个仅支持utf8的mySQL DB。但是我们得到了一些需要utf8mb4才能存储在mySQL中的数据提要。我们如何检测(在Java中)字符串是否需要utf8mb4字符集? 问题答案: 需要utf8mb4的字符在Java中表示为代理对,并占用2个字符。因此,一种检测它们的简单方法是检查char中字符串的长度是否与代码点的数量相同:

  • 我刚刚将我的mysql数据库从utf8转换为utf8mb4,以便支持Emojis,但现在我有一个编码问题。如果我用php打印文本,通常会显示特殊字符,但它们会在数据库中保存为LATIN1ü 我遵循这个指南https://mathiasbynens.be/notes/mysql-utf8mb4 在php中,我在建立连接后设置了这样的字符集 在转换之前,ä被保存为ä,ö被保存为ö等等。 现在它:ü-

  • 问题内容: 我有一个MySQL转储,尝试将其恢复为: 但是,这引发了一个错误: 这是第3231-3233行: 我正在使用MySQL 5.1.69。我该如何解决这个错误? 问题答案: 您的版本不支持该字符集,我相信是它引入的。您应该将mysql升级到用于导出该文件的版本。 然后,错误就很明显了:您在代码中设置了某个字符集,但是您的mysql版本不支持该字符集,因此对此一无所知。 根据https://

  • 问题内容: 运行以下(示例)代码 给我这个输出 如何在第9行打印输出中保留正确的字节值(-27)?因此,将收到命令的预期输出(å)。 问题答案: 如果要保留 字节 值,最好不要使用Reader。要以文本表示任意二进制数据并将其稍后转换回二进制数据,应使用base16或base64编码。 但是,要说明发生了什么,请在调用时使用 默认 字符编码,该编码显然不包括Unicode字符U + 00E5。 如

  • There are many languages in use throughout the world, and they use many different character sets. There are also many ways of encoding character sets into binary formats of bytes. This chapter conside

  • 问题内容: 我目前正在使用ReactJS和webpack构建一个网站。 我的文本编辑器设置为编码,并且使用带重音或特殊字符的字符,例如。 在我的html页面中,我相信我使用的配置正确: 但是特殊字符的渲染方式不正确: 例如,而不是。 我尝试设置,但没有任何改变。 我觉得webpack正在使用编码构建,这使我的角色停滞不前。我该如何解决这个问题? 问题答案: 我没有找到一种使Webpack读取UTF