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 字符。您可以配置两个属性。请注意,您可以将这些属性配置为系统属性或连接属性。

  1. oracle.jdbc.defaultNChar 设置为 true
  2. (可选)将 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 值。

  1. 启动 MySQL 服务器。
  2. 在 JDBC 驱动程序设置下,找到 JDBC 连接设置
  3. 添加此连接属性: characterEncoding=UTF-8

7.6.4. 为 PostgreSQL 数据库配置 Unicode 支持

当数据库字符设置为 UTF8 时,PostgreSQL 数据库支持 Unicode。Unicode 字符可以在没有减少字段长度的任何字段中用于非特殊字段。JDBC 驱动程序不需要特殊设置。字符集在创建 PostgreSQL 数据库时确定。

  1. 输入以下 SQL 命令检查 PostgreSQL 集群的默认字符集。

    show server_encoding;
  2. 如果默认字符集不是 UTF 8,请使用 UTF8 作为默认字符集创建数据库,例如:

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.