6.6. 数据库的 Unicode 注意事项


Red Hat Single Sign-On 中的数据库模式只考虑以下特殊字段中 Unicode 字符串:

  • realms:显示名称、HTML 显示名称
  • federation Providers:显示名称
  • Users:用户名、给定名称、姓、属性名称和值
  • groups:名称、属性名称和值
  • roles: name
  • 对象描述

否则,字符仅限于数据库编码中的字符,通常为 8 位。然而,对于某些数据库系统,可以启用 Unicode 字符的 UTF-8 编码,并在所有文本字段中使用完整的 Unicode 字符。通常,该字符串的长度比 8 位编码的情况要短。

某些数据库需要对数据库和/或 JDBC 驱动程序进行特殊设置,才能处理 Unicode 字符。请在下面查找您的数据库的设置。请注意,如果此处列出数据库,它仍然可正常工作,只要它处理数据库和 JDBC 驱动程序级别的 UTF-8 编码。

从技术上讲,Unicode 支持的关键条件是数据库是否允许为 VARCHARCHAR 字段设置 Unicode 字符。如果是,则 Unicode 将非常明显的几率,通常是字段长度的开支。如果它只支持 NVARCHARNCHAR 字段中的 Unicode 支持,因为 Keycloak 模式使用 VARCHARCHAR 字段。

6.6.1. Oracle 数据库

VARCHARCHAR 字段(例如,使用 AL32UTF8 字符集作为数据库字符集),可以正确处理 Unicode 字符支持。JDBC 驱动程序不需要特殊设置。

如果数据库字符集不是 Unicode,则需要在特殊字段中使用 Unicode 字符,则需要将 connection 属性 oracle.jdbc.defaultNChar 设置为 true。虽然这不是绝对必要,但严格要求将 oracle.jdbc.convertNcharLiterals 连接属性设置为 true。这些属性可以设置为系统属性或连接属性。请注意,设置 oracle.jdbc.defaultNChar 可能会对性能造成负面影响。详情请查看 Oracle JDBC 驱动程序配置文档。

6.6.2. Microsoft SQL Server 数据库

Unicode 字符只针对特殊字段正确处理。不需要对 JDBC 驱动程序或数据库进行特殊设置。

6.6.3. MySQL 数据库

CREATE DATABASE 命令中的 VARCHARCHAR 字段(例如,使用 utf8 字符设置为 MySQL 5.5 中设置的默认数据库字符)中,可以使用 Unicode 字符来创建数据库。请注意,utf8mb4 字符集无法正常工作,因为 utf8 字符集的不同存储要求 [1]).请注意,在这种情况下,不会应用对非特殊字段的长度限制,因为创建的列是为了容纳给定数量的字符数,而不是字节。如果数据库默认字符集不允许存储 Unicode,则只有特殊字段允许存储 Unicode 值。

在 JDBC 驱动程序设置的两侧,需要在 JDBC 连接设置中添加 连接属性字符Encoding=UTF-8

6.6.4. PostgreSQL 数据库

数据库字符集为 UTF8 时支持 Unicode。在这种情况下,任何字段中都可以使用 Unicode 字符,非特殊字段没有减少字段长度。不需要对 JDBC 驱动程序进行特殊设置。

PostgreSQL 数据库的字符集是在创建时确定的。您可以使用 SQL 命令确定 PostgreSQL 集群的默认字符集

show server_encoding;

如果默认字符集不是 UTF 8,您可以创建使用 UTF8 作为其字符集的数据库,如下所示:

create database keycloak with encoding 'UTF8';
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部