【发布时间】:2018-05-02 05:48:55
【问题描述】:
我有 java 应用程序,通过它我可以在 MySQL DB 上执行不同的操作。问题是插入 utf8 字符串时没有正确插入。 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 = "Добр" 在哪里生成带有 ???? 的元组作为一个名字和????作为姓。我已经检查了两个字符串,它们正确地传递给了方法。
【问题讨论】:
-
这里说明的是服务器连接排序规则...您是否验证了在 Java 的 JDBC 连接上正确指定了编码,例如
?useUnicode=yes&characterEncoding=UTF-8(我怀疑 JDBC 驱动程序/连接以一种不是很有帮助的方式“帮助”。) -
@spencer7593 你能链接一些文档吗?
-
您使用的是哪个 JDBC 驱动程序,MySQL Connector/J 还是 MariaDB Connector/J?什么版本? dev.mysql.com/doc/connector-j/5.1/en/… 和 mariadb.com/kb/en/library/about-mariadb-connector-j
-
还要检查您传递的字符串。有时 unicode 字符可能会在插入语句之前丢失(例如,如果您在字符串之间传递值等)
-
@spencer7593,谢谢。我添加了
?characterEncoding=utf8,现在可以了。考虑写一个答案,我想这可能对某人有帮助。