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