首页 > 解决方案 > 从带有 unicode 字符的表中选择时 Hibernate + Mysql 语法错误

问题描述

在我的数据库中,有一个表,其中的一列可能包含最终用户输入的 Unicode 字符。我已经在属性文件中配置了我的休眠 mysql 连接,如下所示。

spring.datasource.url: jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8

对于 DB 表和列,我使用 utf8mb4 字符集和 utf8mb4_unicode_ci 排序规则。

上面的配置可以很好地插入包含我上面提到的列的表中。用户可以从 UI 输入 unicode 字符,它们会很好地保存在表格中。

然后,我使用这个大连接查询来检索一些用户数据集,其中也包括上述 Unicode 数据。在那里,在运行时,我得到一个 MySql 语法错误。

在查询中,我检查搜索参数是否为空。这就是当参数为空时引发异常的地方。

"..... where (:fromDate is null or bt.created_date >= :fromDate) and (:toDate is null or bt.created_date <= :toDate) and ...... "

错误日志:

...................您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'where (null is null or bt.created_date >= null) 附近使用正确的语法............

我也尝试添加&characterSetResults=UTF-8到连接字符串,但没有运气。

这里有什么问题。我怎样才能解决这个问题。

编辑:

原来这个问题和我提到的join没有关系。即使没有包含 unicode 数据的表,问题仍然存在。当仅从连接字符串中删除 unicode 配置时,它可以正常工作。

可能是 db 和 client 之间的字符集和排序规则不匹配的问题?

标签: mysqlhibernateunicodecollationutf8mb4

解决方案


推荐阅读