首页 > 解决方案 > utf8_unicode_ci 字符串插入不正确?

问题描述

我有 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 = "Добр", 产生元组 ???? 作为一个名字和???? 作为姓。我已经检查了两个字符串,它们正确地传递给了方法。

标签: javamysqlutf-8jooq

解决方案


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

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

进一步阅读


推荐阅读