【问题标题】:utf8_unicode_ci String is inserted incorrectly?utf8_unicode_ci 字符串插入不正确?
【发布时间】: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&amp;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,现在可以了。考虑写一个答案,我想这可能对某人有帮助。

标签: java mysql utf-8 jooq


【解决方案1】:

正如@spencer7593 所建议的,问题可能出在 JDBC 连接器中。所以我在url 中添加了以下连接:?characterEncoding=utf8,这样最终的 url 就是"jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8",其中mydb 是数据库的名称。这解决了我的问题。我还想添加以下声明(再次由@spencer7593 提供):

当我们正确配置了一切,但一切都无法正常工作时,我们的 goto 怀疑是 JDBC 驱动程序。为了理清 JVM 和 MySQL 数据库之间的时区差异,为了防止 JDBC 驱动程序通过对各种操作进行不合逻辑的组合来“提供帮助”,我们不得不在连接字符串中添加两个额外的模糊记录设置。

进一步reading

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2020-06-13
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多