문자열
문자열은 코드 단위의 시퀀스입니다. 문자열의 길이는 시퀀스에 있는 코드 단위의 수입니다. 길이가 영(0)이면 값은 비어 있는 문자열이라고 합니다. 이를 널(NULL) 값과 혼동해서는 안 됩니다.
고정 길이 문자열(CHAR)
고정 길이 문자열 컬럼에 있는 모든 값은 길이가 같고, 이는 컬럼의 길이 속성에 의해 판별됩니다. 길이 속성은 문자열 단위가 CODEUNITS32(범위 1-63포함) 가 아닌 경우 1-255범위에 있어야 합니다.
가변 길이 문자열
- VARCHAR
- VARCHAR 값은 최대 32,672바이트 길이일 수 있습니다. 문자열 단위가 CODEUNITS32인 경우 길이는 최대 8,168문자열 단위일 수 있습니다.
- CLOB
- 문자 대형 오브젝트 (CLOB) 값은 최대 2GB빼기 1바이트 (2,147 ,483 ,647바이트) 길이가 될 수 있거나 또는 문자열 단위가 CODEUNITS32인 경우 최대 536,870 ,911 문자열 단위가 될 수 있습니다. CLOB는 대형 SBCS 또는 혼합(SBCS 및 MBCS) 문자 기반 데이터(예: 단일 문자 세트로 작성된 문서)를 저장하는 데 사용되므로, SBCS 또는 연관된 혼합 코드 페이지가 있습니다.
- DISTINCT 절이 앞서는 SELECT 목록
- GROUP BY절
- ORDER BY절
- UNION ALL이 아닌 집합 연산자의 하위 선택
- 기본, 양이 정해진, BETWEEN 또는 IN 술어
- 집계 함수
- VARGRAPHIC, TRANSLATE 및 날짜 및 시간 스칼라 함수
- LIKE 술어에서 패턴 피연산자 또는 POSSTR 함수에서 검색 문자열 피연산자
- 날짜 및 시간 값의 문자열 표현.
VARCHAR을 인수로 사용하는 SYSFUN 스키마에 있는 함수는 4,000바이트보다 긴 VARCHAR을 인수로 승인하지 않습니다. 그러나, 이러한 함수 중 대부분에는 또한 CLOB(1M)를 승인하는 대체 서명이 있습니다. 이러한 함수의 경우 사용자는 4,000개가 넘는 VARCHAR 문자열을 CLOB로 명시적으로 캐스트한 다음 결과를 필요한 길이의 VARCHAR로 다시 캐스트할 수 있습니다.
C에 있는 NUL-종료 문자열은 프리컴파일 옵션의 표준 레벨에 따라 다르게 처리됩니다.
- 비트 데이터
- 코드 페이지와 연관되지 않은 데이터입니다.
- 1바이트 문자 세트(SBCS) 데이터
- 모든 문자가 단일 바이트로 표시되는 데이터.
- 혼합 데이터
- 1바이트 문자 세트(SBCS)와 멀티바이트 문자 세트(MBCS)의 문자의 혼합을 포함할 수도 있는 데이터입니다.
문자열의 문자열 단위 스펙
- OCTETS
- 길이 속성의 단위가 바이트임을 표시합니다. 이 길이 단위는 유니코드가 아닌 데이터베이스에서 모든 문자열 데이터 유형에 적용됩니다. 유니코드 데이터베이스에서 환경 설정에 기반하여 OCTETS를 명시적으로 지정하거나 판별할 수 있습니다.
- CODEUNITS32
- 길이 속성의 단위가 문자로 카운트하는 경우와 비슷한 유니코드 UTF-32 코드 단위임을 표시합니다. 이 길이 단위는 데이터 유형의 기초 코드 페이지에 적용되지 않습니다. 데이터 값의 실제 길이는 데이터가 UTF-32로 변환된 경우와 같이 UTF-32 코드 단위를 카운트하여 판별됩니다. CODEUNITS32 의 문자열 단위는 유니코드 데이터베이스에서만 사용할 수 있습니다. CODEUNITS32는 명시적으로 지정되거나 환경 설정을 기반으로 판별될 수 있습니다.
비유니코드 데이터베이스에서는 문자열 단위는 항상 OCTETS이고 변경될 수 없습니다. 유니코드 데이터베이스에서 문자열 단위는 문자열 데이터 유형의 길이 속성으로 명시적으로 지정되거나 환경 설정을 기반으로 기본값으로 지정될 수 있습니다. FOR BIT DATA 또한 문자열 데이터 유형에 대해 지정된 경우에는 CODEUNITS32는 지정할 수 없고 CODEUNITS32의 환경 설정은 적용되지 않습니다.
문자열 단위에 대한 환경 설정은 NLS_STRING_UNITS 글로벌 변수 또는 string_units 데이터베이스 구성 매개변수의 값을 기반으로 합니다. 데이터베이스 구성 매개변수는 SYSTEM 또는 CODEUNITS32로 설정될 수 있습니다. 글로벌 변수는 SYSTEM 또는 CODEUNITS32로 설정될 수도 있지만 NULL로 설정될 수도 있습니다. 널 값은 SQL 세션에서 string_units 데이터베이스 구성 매개변수 설정을 사용해야 함을 표시합니다. 환경 설정 값이 SYSTEM이면 OCTETS는 기본 문자열 단위 설정으로 사용됩니다.
내장 함수의 문자열 단위
특정 내장 문자열 함수에 문자열 단위를 지정하는 기능을 사용하면 "바이트 기반 방법"보다 더 많은 "문자 기반 방법"으로 문자열 데이터를 처리할 수 있습니다. 문자열 단위는 함수를 실행할 때 길이 또는 위치에 사용되는 단위를 결정합니다. CODEUNITS16, CODEUNITS32 또는 OCTETS를 일부 문자열 함수의 문자열 단위로 지정할 수 있습니다. 문자열 단위가 지정되지 않은 경우에는 기본 문자열 단위는 일반적으로 소스 문자열 인수의 문자열 단위에 의해 결정됩니다. 상세 정보는 사용 중인 함수의 설명을 참조하십시오. 문자열 단위 인수는 유니코드 또는 비유니코드 데이터베이스에서 매개변수를 지원하는 문자열 함수에 지정할 수 있습니다.
- CODEUNITS16
- 유니코드 UTF-16이 조작의 단위임을 지정합니다. CODEUNITS16은 애플리케이션이 너비가 2바이트인 코드 단위에서 데이터를 처리할 때 유용합니다. 보조 문자로 알려진 일부 문자는 인코딩하려면 두 개의 UTF-16 코드가 필요합니다. 예를 들어, 음악 기호 높은음자리표에는 두 개의 UTF-16 코드 단위(UTF-16BE에서 X'D834' 및 X'DD1E')가 필요합니다.
- CODEUNITS32
- 유니코드 UTF-32가 조작의 단위임을 지정합니다. CODEUNITS32는 단순 고정 길이 포맷으로 된 데이터를 처리하고 데이터의 스토리지 형식(ASCII, UTF-8 또는 UTF-16)과 관계 없이 동일한 응답을 리턴해야 하는 애플리케이션에 유용합니다.
- OCTETS
- 바이트가 조작의 단위임을 지정합니다. OCTETS는 종종 애플리케이션이 버퍼 스페이스를 할당하는 데 관심이 있거나 조작이 단순 바이트 처리를 사용해야 하는 경우에 사용됩니다.
OCTETS(바이트)를 사용하여 계산된 문자열의 계산된 길이는 CODEUNITS16 또는 CODEUNITS32를 사용하여 계산된 길이와 다를 수 있습니다. OCTETS를 사용할 때에는 문자열의 길이는 문자열에서 단순히 바이트 수를 카운팅하여 판별됩니다. CODEUNITS16 또는 CODEUNITS32를 사용할 때에는 문자열의 길이는 UTF-16 또는 UTF-32에서 문자열을 표시하는 데 필요한 16비트 또는 32비트 코드 단위의 수를 카운팅하여 판별됩니다. CODEUNITS16 및 CODEUNITS32 를 사용하여 판별되는 길이는 데이터에 추가 문자가 포함되지 않는 한 동일합니다 ( CODEUNITS16 및 CODEUNITS32간의 차이참조).
SELECT CHARACTER_LENGTH(NAME,CODEUNITS16) FROM T1
WHERE NAME = 'Jürgen'
SELECT CHARACTER_LENGTH(NAME,CODEUNITS32) FROM T1
WHERE NAME = 'Jürgen'OCTETS에서 문자열의 길이를 카운트하는 다음 쿼리는 값
7을 리턴합니다. SELECT CHARACTER_LENGTH(NAME,OCTETS) FROM T1
WHERE NAME = 'Jürgen'이러한 값은 지정된 문자열 단위로 표현되는
문자열의 길이를 표시합니다.Format Representation of the name 'Jürgen'
-------- --------------------------------------
UTF-8 X'4AC3BC7267656E'
UTF-16BE X'004A00FC007200670065006E'
UTF-32BE X'0000004A000000FC0000007200000067000000650000006E'문자 'ü'의 표현은 세 문자열 단위마다 서로 다릅니다.- 문자 'ü'의 UTF-8 표현은 X'C3BC'입니다.
- 문자 'ü'의 UTF-16BE 표현은 X'00FC'입니다.
- 문자 'ü'의 UTF-32BE 표현은 X'000000FC'입니다.
내장 함수에 문자열 단위를 지정해도 데이터 유형, 문자열 단위 또는 함수 결과의 코드 페이지에 영향을 미치지 않습니다. 필요한 경우, 데이터는 CODEUNITS16 또는 CODEUNITS32가 지정된 경우 평가를 위해 유니코드로 변환됩니다.
LOCATE 또는 POSITION 함수에 OCTETS가 지정되고 문자열 인수의 코드 페이지는 다르고, 데이터는 source-string 인수의 코드 페이지로 변환됩니다. 이 경우에는 함수의 결과는 source-string 인수의 코드 페이지에 있습니다. 함수에 단일 문자열 인수를 사용하는 OCTETS가 지정되면 데이터는 문자열 인수의 코드 페이지에서 평가되고 함수의 결과는 문자열 인수의 코드 페이지에 있습니다.
CODEUNITS16 및 CODEUNITS32 사이의 차이
CODEUNITS16 또는 CODEUNITS32가 지정되면 결과는 데이터에 유니코드 보조 문자가 포함되었을 때를 제외하고는 동일합니다. 이는 보조 문자는 두 개의 UTF-16 코드 단위 또는 하나의 UTF-32 코드 단위로 표시되기 때문입니다. UTF-8에서 비보조 문자는 1-3바이트로 표시되고 보조 문자는 4바이트로 표시됩니다. UTF-16에서 비보조 문자는 하나의 CODEUNITS16 코드 단위 또는 2바이트로 표시되고, 보조 문자는 두 개의 CODEUNITS16 코드 단위 또는 4바이트로 표시됩니다. UTF-32에서 문자는 하나의 CODEUNITS32 코드 단위 또는 4바이트로 표시됩니다.
| 문자 | UTF-8 표시 | UTF-16BE 표현 | UTF-32BE 표현 |
|---|---|---|---|
| 유니코드 값 X'1D400' - 'A'; 수학적 굵은체 대문자 A | X'F09D9080' | X'D835DC00' | X'0001D400' |
| 유니코드 값 X'0041' - 'A'; 라틴어 대문자 A | X'41' | X'0041' | X'00000041 ' |
Query Returns
----- -------
SELECT CHARACTER_LENGTH(C1,CODEUNITS16) FROM T1 2
SELECT CHARACTER_LENGTH(C1,CODEUNITS32) FROM T1 1
SELECT CHARACTER_LENGTH(C1,OCTETS) FROM T1 4