Db2 에서의 유니코드 구현

Db2 는 UTF-8 및 UCS-2 인코딩을 지원합니다. 유니코드 데이터베이스가 작성될 때 CHAR, VARCHAR, LONG VARCHAR 및 CLOB 데이터는 UTF-8 양식으로 저장되며 GRAPHIC, VARGRAPHIC, LONG VARGRAPHIC 및 DBCLOB 데이터는 UCS-2 빅 엔디안(big-endian) 양식으로 저장됩니다.

대리 쌍은 두 개의 유니코드 값 시퀀스로 구성된 단일 문자에 대한 코드화된 표현인데, 이 쌍의 첫 번째 값은 U+D800 - U+DBFF 범위의 상위 대리이고 두 번째 값은 U+DC00 - U+DFFF 범위의 하위 대리입니다. 대리 쌍을 사용하여 32비트 코드 단위를 사용하지 않고 1,048,576개의 코드 포인트를 추가로 인코딩할 수 있습니다.

버전 7.2 FixPak 4 이전의 DB2 제품 버전에서 DB2는 대리 쌍의 두 문자를 두 개의 독립적인 유니코드 문자로 간주합니다. 따라서 대리 쌍을 UTF-16/UCS-2에서 UTF-8로 변환하면 두 개의 3바이트 시퀀스가 됩니다. Db2 Universal Database 버전 7.2 FixPak 4에서 시작하여 Db2 는 UTF-16/UCS-2 와 UTF-8사이에서 변환할 때 서로게이트 쌍을 인식하므로 한 쌍의 UTF-16 서로게이트는 하나의 UTF-8 4바이트시퀀스가 됩니다. 다른 용도에서 DB2는 계속해서 대리 쌍을 두 개의 독립적인 UCS-2 문자로 간주합니다. 보조 문자를 비보조 문자와 구별하는 방법을 알고 있으면 DB2 유니코드 데이터베이스에 보조 문자를 안전하게 저장할 수 있습니다.

DB2는 COMBINING ACUTE ACCENT 문자(U+0301)와 같은 (비공백) 문자를 포함하여 각 유니코드 문자를 개별 문자로 간주합니다. 동등한 문자 또는 문자 시퀀스를 일관성 있는 기본 표현으로 변환하는 정규화를 수행하지 않습니다. 따라서 DB2는 문자 LATIN SMALL LETTER A WITH ACUTE(U+00E1)가 기본적으로 문자 LATIN SMALL LETTER A(U+0061) 다음에 문자 COMBINING ACUTE ACCENT(U+0301)가 오는 것과 동일하다고 인식하지 않습니다.

날짜 또는 시간 형식, 10진 구분자 등과 같이 문화적 차이가 있는 모든 매개변수는 클라이언트의 현재 지역을 기준으로 합니다.

유니코드 데이터베이스는 DB2 데이터베이스 시스템이 지원하는 모든 코드 페이지의 연결을 허용합니다. 데이터베이스 관리자는 클라이언트의 코드 페이지와 유니코드 간에 문자 및 그래픽 문자열에 대한 코드 페이지 변환을 자동으로 수행합니다.

모든 클라이언트가 문자 레퍼토리, 입력 방법, 환경이 지원하는 글꼴에 따라 제한되지만 유니코드 데이터베이스 자체는 모든 유니코드 문자를 허용하고 저장합니다. 따라서 모든 클라이언트가 일반적으로 유니코드 문자 서브세트로 작업하지만 데이터베이스 관리자는 유니코드 문자의 전체 레퍼토리를 허용합니다.

문자가 로컬 코드 페이지에서 유니코드로 변환될 때 바이트 수가 확장될 수 있습니다. 버전 8 이전에는 SQL문의 시멘틱에 따라 문자 데이터가 클라이언트 코드 페이지에서 인코딩되는 것으로 표시되었을 수 있으며, 데이터베이스 서버가 클라이언트 코드 페이지에서 전체 명령문을 조작했습니다. 이 조작으로 인해 데이터가 잠재적으로 확장될 수 있었습니다. 버전 8부터, SQL문이 데이터베이스 서버에 입력되면 데이터베이스 서버의 코드 페이지에서만 작동합니다. 이 경우, 크기 변경은 없습니다. 그러나 일부 문자열 함수에 문자열 단위를 지정하면 내부 코드 페이지 변환이 발생할 수 있습니다. 내부 코드 페이지 변환이 발생하면 데이터 문자열의 크기가 변경됩니다.