Java utf8\u unicode\u ci字符串插入错误?
我有一个java应用程序,通过它我可以对MySQL数据库执行不同的操作。问题在于,插入utf8字符串时未正确插入。DB的字符集是Java utf8\u unicode\u ci字符串插入错误?,java,mysql,utf-8,jooq,Java,Mysql,Utf 8,Jooq,我有一个java应用程序,通过它我可以对MySQL数据库执行不同的操作。问题在于,插入utf8字符串时未正确插入。DB的字符集是utf8,我已经将排序规则设置为utf8\u unicode\u ci。服务器连接排序规则也是utf8\u unicode\u ci。此外,当我从phpMyAdmin插入数据时,它是正确插入的,但当我使用JOOQ从Java应用程序插入数据时,它不是。例如: Result<ExecutorsRecord> executorsRecord =
utf8
,我已经将排序规则设置为utf8\u unicode\u ci
。服务器连接排序规则也是utf8\u unicode\u ci
。此外,当我从phpMyAdmin插入数据时,它是正确插入的,但当我使用JOOQ从Java应用程序插入数据时,它不是。例如:
Result<ExecutorsRecord> executorsRecord =
context.insertInto(EXECUTORS, EXECUTORS.ID, EXECUTORS.NAME, EXECUTORS.SURNAME, EXECUTORS.REGION, EXECUTORS.PHONE, EXECUTORS.POINTS, EXECUTORS.E_TYPE)
.values(id, name, surname, region, phone, 0, type)
.returning(EXECUTORS.ID)
.fetch();
结果执行器记录=
context.insertInto(EXECUTORS、EXECUTORS.ID、EXECUTORS.NAME、EXECUTORS.姓氏、EXECUTORS.REGION、EXECUTORS.PHONE、EXECUTORS.POINTS、EXECUTORS.E_TYPE)
.值(id、姓名、姓氏、地区、电话、0、类型)
.返回(执行者ID)
.fetch();
其中
name=“ББбб”和name=“Бббб”产生带???的元组????作为一个名字和????作为姓氏。我已经检查了这两个字符串,它们被正确地传递给方法 As@spencer7593表明问题可能出在JDBC连接器中。因此,我在连接的url
中添加了以下内容:?characterEncoding=utf8
,因此最终的url是“jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8“
,其中mydb
是数据库的名称。这解决了我的问题。我还要补充以下声明(同样由@spencer7593撰写):
当我们正确地配置了一些东西,但这些东西不起作用时,我们的目标就是JDBC驱动程序。为了理清JVM和MySQL数据库之间的时区差异,防止JDBC驱动程序通过不合理地组合各种操作来“帮助”,我们必须在连接字符串中添加两个额外的模糊记录的设置
此处进一步说明的是服务器连接排序规则。。。您是否已验证在Java的JDBC连接上正确指定了编码,例如?useUnicode=yes&characterEncoding=UTF-8
(我怀疑JDBC驱动程序/连接在某种程度上“帮助”了您,但帮助不大。)@spencer7593您是否可以链接一些文档?您使用的是哪个JDBC驱动程序,MySQL连接器/J还是MariaDB连接器/J?什么版本?并检查您传递的字符串。有时,在insert语句之前可能会丢失unicode字符(例如,如果在字符串之间传递值等)@spencer7593,谢谢。我已经添加了?characterEncoding=utf8
,现在它可以工作了。考虑写一个答案,我想它可能对某人有帮助。