我有java应用程序,通过它我可以在MySQL DB上执行不同的操作。问题是当插入utf8 String时,它没有正确插入。 DB的字符集为utf8
,我已将整理设置为utf8_unicode_ci
。服务器连接排序规则也是utf8_unicode_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();
其中name = "Бобр"
和surname = "Добр"
与????生成元组作为名称和????作为姓氏。我检查了两个字符串,它们正确地传递给了方法。
答案 0 :(得分:2)
正如@ spencer7593建议问题可能出在JDBC连接器中。所以我添加了url
以下连接:?characterEncoding=utf8
,以便最终网址为"jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8"
,其中mydb
是数据库的名称。这解决了我的问题。另外我想添加以下声明(再次由@ spencer7593):
当我们正确配置事物并且事情不起作用时,我们的goto怀疑是JDBC驱动程序。为了解决JVM和MySQL数据库之间的时区差异,为了防止JDBC驱动程序通过对各种操作进行不合逻辑的组合来“帮助”,我们不得不在连接字符串中添加两个模糊记录的设置。
进一步reading