6.6. データベースの Unicode の考慮事項
Red Hat Single Sign-On のデータベーススキーマは、以下の特別なフィールドの Unicode 文字列のみを考慮します。
- レルム: 表示名、HTML 表示名
- フェデレーションプロバイダー: 表示名
- ユーザー: ユーザー名、名、姓、属性名、および値
- グループ: 名前、属性名、値
- ロール: 名前
- オブジェクトの説明
そうしないと、文字は多くの場合 8 ビットであるデータベースエンコーディングに含まれるものに制限されます。ただし、データベースシステムによっては、Unicode 文字の UTF-8 エンコーディングを有効にし、すべてのテキストフィールドに完全な Unicode 文字セットを使用できます。多くの場合、8 ビットのエンコーディングの場合よりも文字列の最大長が短くすることで、カウンターが分散されます。
データベースによっては、Unicode 文字を処理できるようにするには、データベースや JDBC ドライバーに特別な設定が必要になります。データベースの設定は、以下で確認してください。データベースがここにリストされている場合には、データベースと JDBC ドライバーのレベルの両方で UTF-8 エンコーディングを適切に処理できます。
技術的には、すべてのフィールドの Unicode サポートの主な基準は、データベースが VARCHAR
フィールドおよび CHAR
フィールドに Unicode 文字セットを設定することができるかどうかです。yes の場合、通常はフィールドの長さが入念される可能性が高くなっています。NVARCHAR
フィールドおよび NCHAR
フィールドでのみ Unicode をサポートしているのであれば、Keycloak スキーマは VARCHAR
フィールドおよび CHAR
フィールドを広範囲に使用しているため、すべてのテキストフィールドで Unicode サポートしていることはおそらくありません。
6.6.1. Oracle データベース
データベースが VARCHAR
フィールドおよび CHAR
フィールドで Unicode サポートをサポートして作成されている場合 (AL32UTF8
文字セットをデータベースの文字セットとして使用するなど)、Unicode 文字は適切に処理されます。JDBC ドライバーには特別な設定は必要ありません。
データベース文字セットが Unicode でない場合、特殊フィールドに Unicode 文字を使用するには、接続プロパティー oracle.jdbc.defaultNChar
を true
に設定して JDBC ドライバーを設定する必要があります。厳密には必要ありませんが、oracle.jdbc.convertNcharLiterals
接続プロパティーを true
に設定することが適している場合があります。これらのプロパティーはシステムプロパティーまたは接続プロパティーとして設定できます。oracle.jdbc.defaultNChar
の設定は、パフォーマンスに悪い影響を及ぼす可能性があることに注意してください。詳細は、Oracle JDBC ドライバーの設定に関するドキュメントを参照してください。
6.6.2. Microsoft SQL Server Database
Unicode 文字は、特別なフィールドに対してのみ適切に処理されます。JDBC ドライバーまたはデータベースの特別な設定は必要ありません。
6.6.3. MySQL Database
データベースが、CREATE DATABASE
コマンドの VARCHAR
フィールドおよび CHAR
フィールドで Unicode サポートをサポートして作成されている場合は、Unicode 文字が適切に処理されます (utf8
文字セットを MySQL 5.5 のデフォルトのデータベースの文字セットとして使用するなど。utf8
文字セットのストレージ要件が異なるため、utf8mb4
文字セットが機能しないことに注意してください [1])。この場合、特定の文字数に対応するために列が作成されてバイトではなく、特別なフィールドへの長さの制限が適用されることに注意してください。データベースのデフォルト文字セットで Unicode を保存できない場合、特別なフィールドのみが Unicode 値を格納できます。
JDBC ドライバー設定で、接続プロパティー characterEncoding=UTF-8
を JDBC 接続設定に追加する必要があります。
6.6.4. PostgreSQL データベース
Unicode は、データベースの文字セットが UTF8
の場合にサポートされます。この場合、Unicode 文字をいずれかのフィールドに使用できますが、特別なフィールド以外のフィールドの長さが削減されません。JDBC ドライバーの特別な設定は必要ありません。
PostgreSQL データベースの文字セットは、作成時に決定されます。SQL コマンドを使用して、PostgreSQL クラスターのデフォルトの文字セットを決定できます。
show server_encoding;
デフォルトの文字セットが UTF 8 ではない場合、以下のように UTF8 を文字セットとして使用してデータベースを作成できます。
create database keycloak with encoding 'UTF8';