Java utf8\u unicode\u ci字符串插入错误?

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 =

我有一个java应用程序,通过它我可以对MySQL数据库执行不同的操作。问题在于,插入utf8字符串时未正确插入。DB的字符集是
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
,现在它可以工作了。考虑写一个答案,我想它可能对某人有帮助。