mysql - 从带有 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 之间的字符集和排序规则不匹配的问题?
解决方案
推荐阅读
- html - 设置 Viewbox 以便内联 SVG 将“对齐”到包含元素的大小?
- typescript - 是否可以在 TS 中创建类型安全的函数集合?
- sql-server - 如何将第一行转换为列名?
- python - 如何调整 iotools.read_tmy3 函数的 tmy_data 输出中的索引。如果其他人有同样的问题,我如何解决我的问题
- tensorflow - TensorFlow Lite 量化未能改善推理延迟
- php - 如何打印在codeigniter的其他表中多次使用的主键名称
- pytorch - 在 pytorch 中保存模型时,某些参数未保存
- gembox-spreadsheet - PDF转换问题
- multithreading - 偶然的多线程,但不是单线程,Bug (Common Lisp)
- javascript - 如何使用 args 作为 json 字段