9.6. 为数据库配置 Unicode 支持
Unicode 对所有字段的支持取决于数据库是否允许 VARCHAR 和 CHAR 字段使用 Unicode 字符集。
- 如果可以设置这些字段,则 Unicode 可能可以正常工作,通常以字段长度为代价。
- 如果数据库只支持 NVARCHAR 和 NCHAR 字段中的 Unicode,则 Unicode 对所有文本字段的支持不太可能工作,因为服务器架构广泛使用 VARCHAR 和 CHAR 字段。
数据库模式只为以下特殊字段提供对 Unicode 字符串的支持:
- realm :显示名称、HTML 显示名称、本地化文本(键和值)
- 联邦 供应商:显示名称
- Users: username, given name, last name, attribute name and values
- groups :名称、属性名称和值
- roles: name
- 对象描述
否则,字符仅限于数据库编码中包含的字符,通常为 8 位。但是,对于某些数据库系统,您可以启用 Unicode 字符的 UTF-8 编码,并在所有文本字段中使用完整的 Unicode 字符。对于给定的数据库,这个选择可能会导致最大字符串长度比 8 位编码支持的最大字符串长度要短。
9.6.1. 为 Oracle 数据库配置 Unicode 支持 复制链接链接已复制到粘贴板!
如果在 VARCHAR 和 CHAR 字段中使用 Unicode 支持创建数据库,则 Oracle 数据库中支持 Unicode 字符。例如,您配置了 AL32UTF8 作为数据库字符集。在这种情况下,jdbc 驱动程序不需要特殊设置。
如果没有使用 Unicode 支持创建数据库,您需要配置 JDBC 驱动程序来支持特殊字段中的 Unicode 字符。您可以配置两个属性。请注意,您可以将这些属性配置为系统属性或连接属性。
-
将
oracle.jdbc.defaultNChar设置为true。 (可选)将
oracle.jdbc.convertNcharLiterals设置为true。注意有关这些属性和任何性能影响的详情,请查看 Oracle JDBC 驱动程序配置文档。
9.6.2. 对 Microsoft SQL Server 数据库的 Unicode 支持 复制链接链接已复制到粘贴板!
Unicode 字符只支持 Microsoft SQL Server 数据库的特殊字段。数据库不需要特殊设置。
JDBC 驱动程序的 sendStringParametersAsUnicode 属性应设为 false,以显著提高性能。如果没有此参数,Microsoft SQL Server 可能无法使用索引。
9.6.3. 为 MySQL 数据库配置 Unicode 支持 复制链接链接已复制到粘贴板!
如果使用 CREATE DATABASE 命令,如果在 VARCHAR 和 CHAR 字段中使用 Unicode 支持创建数据库,则 MySQL 数据库中支持 Unicode 字符。
请注意,由于 utf8 字符集的不同存储要求,不支持 utf8mb4 字符集。详情请查看 MySQL 文档。在这种情况下,非特殊字段的长度限制不适用,因为创建了列来容纳字符数,而不是字节。如果数据库默认字符集不允许 Unicode 存储,则只有特殊字段可以存储 Unicode 值。
- 启动 MySQL 服务器。
- 在 JDBC 驱动程序设置下,找到 JDBC 连接设置。
-
添加此连接属性:
characterEncoding=UTF-8
9.6.4. 为 PostgreSQL 数据库配置 Unicode 支持 复制链接链接已复制到粘贴板!
当数据库字符设置为 UTF8 时,PostgreSQL 数据库支持 Unicode。对于非特殊字段,任何字段都可使用 Unicode 字符,且不能减少字段长度。JDBC 驱动程序不需要特殊设置。字符集是在创建 PostgreSQL 数据库时决定的。
输入以下 SQL 命令,检查 PostgreSQL 集群的默认字符集。
show server_encoding;
show server_encoding;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果默认字符集不是 UTF 8,请使用命令创建使用 UTF8 作为默认字符集的数据库,例如:
create database keycloak with encoding 'UTF8';
create database keycloak with encoding 'UTF8';Copy to Clipboard Copied! Toggle word wrap Toggle overflow