我正在尝试记录从 Java 应用程序客户端发送到 MySQL 数据库的字符串。从客户端发送的字符串是UTF-8编码的。我已经确认了这一点,因为我已经使用wireshark等工具进行了数据包跟踪。客户端发送的字符串由 3 个字符组成,分别是拉丁语 OE (0xc593)、beta (0xc39f)、欧元符号 (0xE2 0x82 0xAC)。我正在使用 setstring 的准备语句方式将字符串记录到数据库中。该表是在支持 utf-8 字符编码的情况下创建的。现在,当我在数据库中看到记录的字符串时,我发现了这个
select hex(message) from table1
C385 C293 C383 C29F C3A2 C282 C2AC
似乎有什么东西正在改变中间的字符串。谁能帮我解决这个问题吗?
谢谢。
最佳答案
根据MySQL docs ,
Client applications that need to communicate with the server using Unicode should set the client character set accordingly; for example, by issuing a SET NAMES 'utf8' statement.
您还应该检查 character_set_client和 character_set_connection系统变量来了解 MySQL 如何尝试解释您的字符串。
您还可以通过运行SHOW TABLE STATUS IN database
查询来检查各个表所使用的排序规则。
希望这能让您更清楚地了解 MySQL 服务器正在尝试如何处理您从客户端发送的字符串。阅读the docs也应该具有启发性。
祝你好运:-)
关于java - 从 Java 在 MySQL 中记录 utf-8 字符串时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520512/