6.6. 데이터베이스에 대한 유니코드 고려 사항
Red Hat Single Sign-On의 데이터베이스 스키마는 다음과 같은 특수 필드의 유니코드 문자열만 계정합니다.
- realms: 표시 이름, HTML 표시 이름, 지역화 텍스트(키 및 값)
- 페더레이션 공급자: 표시 이름
- users: 사용자 이름, 이름, 성, 특성 이름 및 값
- groups: 이름, 특성 이름 및 값
- 역할: 이름
- 오브젝트에 대한 설명
그렇지 않으면 문자가 8비트인 데이터베이스 인코딩에 포함된 문자로 제한됩니다. 그러나 일부 데이터베이스 시스템의 경우 유니코드 문자의 UTF-8 인코딩을 활성화하고 모든 텍스트 필드에서 전체 유니코드 문자 집합을 사용할 수 있습니다. 종종 이 값은 8비트 인코딩의 경우보다 짧은 문자열 길이로 조정됩니다.
일부 데이터베이스에서는 유니코드 문자를 처리할 수 있도록 데이터베이스 및/또는 JDBC 드라이버에 대한 특수 설정이 필요합니다. 아래에서 데이터베이스에 대한 설정을 찾으십시오. 데이터베이스가 여기에 나열되어 있는 경우 데이터베이스 및 JDBC 드라이버 수준에서 UTF-8 인코딩을 올바르게 처리하는 경우에도 제대로 작동할 수 있습니다.
기술적으로 모든 필드에 대한 유니코드 지원의 주요 기준은 데이터베이스에서 VARCHAR
및ECDHE 필드에 대한 유니코드 문자 세트를 설정할 수 있는지 여부입니다. 그렇지 않으면 일반적으로 유니코드가 필드 길이를 대신할 가능성이 높습니다.
NVARCHAR
및 NCHAR
필드에서 유니코드만 지원하는 경우 모든 텍스트 필드에 대한 유니코드 지원은 Keycloak 스키마에서 VARCHAR
및ECDHE 필드를 광범위하게 사용하므로 거의 없습니다.
6.6.1. Oracle 데이터베이스
유니코드 문자는 데이터베이스가 VARCHAR
및ECDHE 필드에서 유니코드 지원을 사용하여 생성됨(예: AL32UTF8
문자 세트를 데이터베이스 문자 세트로 사용하여) 생성되었을 때 올바르게 처리됩니다. JDBC 드라이버에는 특별한 설정이 필요하지 않습니다.
데이터베이스 문자 집합이 유니코드가 아닌 경우 특수 필드에서 유니코드 문자를 사용하려면 연결 속성 oracle.jdbc.defaultNChar
을 true
로 설정하여 JDBC 드라이버를 구성해야 합니다. 또한 oracle.jdbc.convertNcharLiterals
연결 속성을 true
로 설정하는 것이 엄격하게 필요하지는 않을 수 있습니다. 이러한 속성은 시스템 속성 또는 연결 속성으로 설정할 수 있습니다. oracle.jdbc.defaultNChar
설정은 성능에 부정적인 영향을 미칠 수 있습니다. 자세한 내용은 Oracle JDBC 드라이버 구성 설명서를 참조하십시오.
6.6.2. Microsoft SQL Server 데이터베이스
유니코드 문자는 특수 필드에 대해서만 올바르게 처리됩니다. JDBC 드라이버 또는 데이터베이스의 특별한 설정은 필요하지 않습니다.
6.6.3. MySQL 데이터베이스
유니코드 문자가 올바르게 처리되면 데이터베이스가 CREATE
CloudEvent 명령의 VARCHAR
및ECDHE 필드에서 유니코드 지원을 사용하여 생성되었습니다(예: MySQL 5.5에서 기본 데이터베이스 문자 세트로 utf8
문자 집합을 사용하여 사용).
utf8mb4
문자 세트는 utf8
문자 세트와 다른 스토리지 요구 사항으로 인해 작동하지 않습니다. [1]). 이 경우 바이트가 아닌 지정된 수의 문자를 수용하기 위해 열이 생성되었기 때문에 비특별 필드에 대한 길이 제한이 적용되지 않습니다. 데이터베이스 기본 문자 집합이 유니코드 저장을 허용하지 않는 경우 특수 필드만 유니코드 값을 저장할 수 있습니다.
JDBC 드라이버 설정 측에서 연결 속성 characterEncoding=UTF-8
을 JDBC 연결 설정에 추가해야 합니다.
6.6.4. PostgreSQL 데이터베이스
데이터베이스 문자 집합이 UTF8
인 경우 유니코드가 지원됩니다. 이 경우 유니코드 문자를 모든 필드에서 사용할 수 있으며 특수하지 않은 필드에는 필드 길이를 줄일 수 없습니다. 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';