【问题标题】:JPA + MariaDB: how does the collation affect unicode support?JPA + MariaDB:排序规则如何影响 unicode 支持?
【发布时间】: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 字符串在没有填充的情况下比较它们?

【问题讨论】:

    标签: java unicode mariadb


    【解决方案1】:

    为我解决了什么问题:将 MySQL Connector/J 从 8.0.23 提升到 8.0.27。

    从 8.0.26 开始,MySQL 更改了 JDBC 驱动程序与服务器协商 unicode 处理的方式 (link)。

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2019-07-07
      • 2018-04-27
      • 2012-02-22
      • 2012-12-25
      相关资源
      最近更新 更多