搜索

6.6. 数据库的 Unicode 注意事项

download PDF

Red Hat Single Sign-On 中的数据库 schema 在以下特殊字段中只有 Unicode 字符串的帐户:

  • realms: 显示名称、HTML 显示名称、本地化文本(密钥和值)
  • 联合供应商:显示名称
  • 用户:用户名、指定名称、姓、属性名称和值
  • groups: name、attribute name 和 values
  • roles: name
  • 对象描述

否则,字符仅限于数据库编码中包含的字符,通常是 8 位。但是,对于某些数据库系统,可以启用 Unicode 字符的 UTF-8 编码,并在所有文本字段中使用完整的 Unicode 字符集。通常,这与使用 8 位编码的情况相比,这个字符串的最大长度会比较短。

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

从技术上讲,所有字段的 Unicode 支持的关键条件是数据库是否允许为 VARCHARCHAR 字段设置 Unicode 字符集。如果是,则 Unicode 的几率会非常容易,通常以字段长度的代价为代价。如果它只支持 NVARCHARNCHAR 字段的 Unicode 支持,则所有文本字段的 Unicode 支持不太可能,因为 Keycloak 模式使用 VARCHARCHAR 字段。

6.6.1. Oracle 数据库

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

如果数据库字符集不是 Unicode,那么要在特殊字段中使用 Unicode 字符,需要将 JDBC 驱动程序配置为 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 数据库

Unicode 字符被正确处理,只要在 CREATE DATABASE 命令中的 VARCHARCHAR 字段中有 Unicode 支持来创建数据库(例如,使用 utf8 字符设置为 MySQL 5.5 中的默认数据库字符)。请注意,由于 utf8 字符集有不同的存储要求,utf8mb4 字符集无法正常工作 [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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.