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 の場合、フィールドの長さと引き換えに Unicode が使用できる可能性が高くなっています。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 データベース リンクのコピーリンクがクリップボードにコピーされました!
Unicode 文字は、特別なフィールドに対してのみ適切に処理されます。JDBC ドライバーまたはデータベースの特別な設定は必要ありません。
6.6.3. MySQL データベース リンクのコピーリンクがクリップボードにコピーされました!
データベースが、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;
show server_encoding;
デフォルトの文字セットが UTF 8 ではない場合、以下のように UTF8 を文字セットとして使用してデータベースを作成できます。
create database keycloak with encoding 'UTF8';
create database keycloak with encoding 'UTF8';