JPA + MariaDB:排序规则如何影响 unicode 支持?
Posted
技术标签:
【中文标题】JPA + MariaDB:排序规则如何影响 unicode 支持?【英文标题】:JPA + MariaDB: how does the collation affect unicode support? 【发布时间】:2022-01-17 20:48:24 【问题描述】:我的 java 服务将 MariaDB (10.3) 中的内容存储在数据库表中,使用 JPA 3 和 EclipseLink 作为 JPA 提供程序。数据库使用编码uft8mb4
和默认排序规则utf8mb4_general_ci
。 RDBMS 配置为character-set-server = utf8mb4
。
这是一个简单的表,映射到 DAO。
CREATE TABLE `directory_entries` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`version` int(11) NOT NULL,
`name` varchar(250) CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
到目前为止一切顺利。将字符串存储在 name
列中,然后再次检索实体可以正常工作:存储和获取 Unicode 字符。
现在,我发现,当按 name
列中的值查询条目时,"A " == "A"
,除非使用 no-pad 排序规则。将列的排序规则切换为 utf8mb4_general_nopad_ci
修复了空白比较,但不再存储未修改的 unicode 字符:“ü”变为“ü”。
这里发生了什么?我的理解是排序规则只在排序和比较中起作用,而不在存储和获取中起作用?!我如何存储和获取 unicode 字符串并在没有填充的情况下比较它们?
【问题讨论】:
【参考方案1】:为我解决了什么问题:将 mysql Connector/J 从 8.0.23 提升到 8.0.27。
从 8.0.26 开始,MySQL 更改了 JDBC 驱动程序与服务器协商 unicode 处理的方式 (link)。
【讨论】:
以上是关于JPA + MariaDB:排序规则如何影响 unicode 支持?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL / MariaDB 不区分大小写的排序规则仍然区分大小写吗?