CUBRID 2008 R4.1 기초강좌
데이터 정의 및 타입 - 문자 스트링 0 0 5,360

by 큐브리드 CHAR VARCHAR NCHAR NCHAR VARYING [2009.03.20]


 
데이터 정의 및 타입 - 문자 스트링
 
1. 문자 스트링 데이터 타입의 정의와 특성
 
1) 정의
 
CUBRID 데이터베이스는 네 가지 종류의 문자 스트링(character string)을 지원한다.
 
고정길이 문자 스트링 :   CHAR(n)
가변길이 문자 스트링 :   VARCHAR(n)
고정길이 국가 문자 스트링 :   NCHAR(n)
가변길이 국가 문자 스트링 :   NCHAR VARYING(n)
 
모든 종류의 문자 스트링은 작은 따옴표로 둘러싼다. ANSI 표준에 따라 두 개의 문자 스트링 사이에 공간으로 취급할 수 있는 문자(예: 공백, 탭, 줄바꿈 등)가 있다면, 두 개의 문자 스트링은 연속된 하나의 문자 스트링으로 취급된다. 예를 들어, 아래의 두 문자 스트링은 동일하다.
’abcdef’

’abc’
’def’
 
작은 따옴표 자체를 문자 스트링에 포함시키려면, 두 개의 작은 따옴표를 연속으로 입력하면 된다. 예를 들어, 아래의 왼쪽 문자 스트링은 실제로 오른쪽과 같이 저장된다.
’’abcde’’fghij’   =>   ’abcde’fghij
 
모든 문자 스트링에 대한 토큰의 최대 크기는 16KB이다. 국가 문자 스트링은 영어 알파벳에서 찾을 수 없는 문자 스트링을 저장할 때 사용한다. 국가 문자 스트링은 앞에 문자 N(반드시 대문자)을 덧붙이는 것이 일반 문자 스트링과 다른 점이다. 예를 들어, 다음과 같다.
N’Härder’
 
2) 특성
 
① 길이(Length)
 
문자 스트링의 길이는 문자의 개수로 나타낸다. 고정길이든 가변길이든 문자 스트링의 크기는 속성이 정의될 때 주어진다. 문자 스트링의 길이는 메소드를 정의할 때 인자의 타입에도 사용될 수 있다.
만약, 문자 스트링의 크기가 정의된 최대 길이를 넘어설 때, 넘어서는 부분이 공백문자(ASCII로 32)인 경우에는 이를 절삭하고, 넘어서는 부분이 공백문자가 아닌 경우에는 오류로 처리된다. 고정길이 문자 스트링에 정의된 길이보다 작은 문자 스트링이 저장될 때에는 나머지 부분이 공백문자로 채워진다. 그러나, 가변길이 문자 스트링의 경우에는 나머지 부분에 공백을 채우지 않고 입력된 문자 스트링만 저장한다.
문자 스트링이 가질 수 있는 최대 크기는 1,073,741,823바이트, 혹은 1GB이다. 이보다 더 큰 스트링은 절삭된다. CSQL 문장으로 한번에 입력 혹은 출력될 수 있는 스트링의 최대 크기는 16에서 8192KB(즉, 8,388,608바이트)까지이다. 국가 문자 스트링의 최대 크기는 일반 문자 스트링의 절반인 536,870,911 문자이다. 그 이유는 국가 문자 스트링의 경우 한 문자당 한 바이트 이상이 필요한 경우가 있기 때문이다. 같은 이유로, CSQL 문장으로 한번에 입력 혹은 출력될 수 있는 국가 문자 스트링의 최대 크기도 절반인 536,870,911 문자가 된다.
 
② 문자코드 세트(Character Code Set)
 
CUBRID는 다음과 같은 문자 코드 세트를 지원한다.
 
8-비트 ASCII
 
8-비트 ISO 8859-1 Latin
 
JIS X 208 문자 세트 중 EUC 인코딩(일본어 문자 세트)
 
JIS X 208 문자 세트 중 Shift-JIS 인코딩(일본어 문자 세트)
 
KSC 5601-1992 (한국어 문자 표준)
 
※ 위 문자 세트의 모든 문자가 문자 스트링에 포함될 수 있다(NULL 문자는 ’\0’로 나타낸다).
 
③ 문자 코드 세트의 정렬(Collating Character Code Set)
 
문자 코드는 코드 세트 내에서 일정한 규칙으로 정렬되어 있다. 이 규칙을 정렬 체계(collation)라 한다. 정렬 체계를 통하여 문자 코드를 비교할 때 왼쪽에서 오른쪽으로 할지, 그 반대로 할지를 결정하고, 마지막에 붙어있는 공백을 비교에서 사용할지 말지 등을 결정한다. 각 문제 코드 세트는 이미 정의된 기본 정렬 체계를 포함하고 있다.
국가 문자 타입의 경우에는 해당 문자 코드 세트의 인코딩 알고리즘에 따라 정렬 체계가 결정된다.
 
④ 문자 스트링 변환(Character String Coercion)
 
고정길이와 가변길이 문자 스트링 사이에는 두 문자의 길이가 비교 가능할 수 있도록 자동 변환이 된다. 자동 변환은 같은 문자 코드 세트에 속하는 문자 스트링에만 적용된다. 예를 들어, 데이타 타입이 CHAR(5)인 속성 값을 추출하여 데이터 타입이 CHAR(10)인 컬럼에 삽입하는 경우 자동으로 타입이 CHAR(10)으로 변환되어 삽입된다. 문자 스트링을 명시적으로 변환할 수도 있는데, 이 때에는 CAST 연산자를 사용 한다.
 
2. CHAR(n)
 
고정길이 문자 스트링은 CHAR(n)로 나타낸다. 여기서 n은 ASCII 문자 스트링의 개수를 나타내는 것으로 한 문자는 1바이트를 차지한다. 만약 n이 생략되면 길이는 디폴트 값인 1로 지정된다. 만약 문자 스트링의 크기가 n을 넘어설 때, 넘어서는 부분이 공백문자인 경우에는 이를 절삭하고, 넘어서는 부분이 공백문자가 아닌 경우에는 오류로 처리된다. n보다 작은 문자 스트링이 저장될 때에는 나머지 부분이 공백문자로 채워진다.
(CHAR(n)와 CHARACTER(n)는 같은 의미로 사용된다.)
 
1) 참고 사항
 
CHAR는 항상 ISO 8859-1 Latin 문자 코드 세트를 사용한다.
 
n은 0보다 큰 숫자여야 한다.
 
채우는 문자로 사용되는 공백은 특수 문자를 비롯한 어느 문자보다도 작은 것으로 간주된다.
 
2) 예제
CHAR(12)에 ’pacesetter’를 저장하면 ’pacesetter  ’가 된다(10자리 문자 스트링과 공백문자 2개로 구성됨).
CHAR(10)에 ’pacesetter  ’를 저장하면 ’pacesetter’가 된다(10을 넘어서는 부분이 공백문자이므로 이를 절삭하고 10자리 문자 스트링로 구성됨).
CHAR(4)에 ’pacesetter’를 저장하면 오류가 발생한다(문자 스트링의 크기가 4보다 크기 때문에 오류 발생).
CHAR에 ’p ’를 저장하면 ’p’가 된다(n이 생략되면 길이는 디폴트 값인 1로 지정됨).
 
3. VARCHAR(n) 또는 CHAR VARYING(n)
 
가변길이 문자 스트링은 VARCHAR(n)로 나타낸다. 여기서 n은 ASCII 문자 스트링의 최대 개수를 나타내는 것으로, 한 문자는 1바이트를 차지한다. 만약, n이 생략되면 길이는 최대 길이인 1,073,741,823로 지정된다. 만약 문자 스트링의 크기가 n을 넘어설 때, 넘어서는 부분이 공백문자인 경우에는 이를 절삭하고 넘어서는 부분이 공백문자가 아닌 경우에는 오류로 처리된다. n보다 작은 문자 스트링이 저장될 때에는 나머지 부분이 공백문자로 채워지지 않는다. 즉, 꼭 필요한 만큼만 저장된다.
(VARCHAR(n)와 CHARACTER VARYING(n), CHAR VARYING(n)은 같은 의미로 사용된다.)
 
1) 참고 사항
 
STRING은 VARCHAR(최대길이)와 같다.
 
n은 0보다 큰 숫자여야 한다.
 
2) 예제
VARCHAR(12)에 ’pacesetter’를 저장하면 ’pacesetter’가 된다(10자리 문자 스트링로 구성됨).
VARCHAR(12)에 ’pacesetter  ’를 저장하면 ’pacesetter  ’가 된다(10자리 문자 스트링과 공백문자 2개로 구성됨).
VARCHAR(10)에 ’pacesetter  ’를 저장하면 ’pacesetter’가 된다(10을 넘어서는 부분이 공백문자이므로 이를 절삭하고 10자리 문자 스트링로 구성됨).
VARCHAR(4)에 ’pacesetter’를 저장하면 오류가 발생한다(문자 스트링의 크기가 4보다 크기 때문에 오류 발생).
VARCHAR에 ’p ’를 저장하면 ’p’가 된다(n이 생략되면 최대길이는 디폴트 값인 1,073,741,823로 지정되고, 저장시 나머지 부분은 공백문자로 채워지지 않음).
 
4. STRING
 
STRING은 가변길이 문자 스트링 데이터 타입이다. STRING은 VARCHAR를 최대 길이로 지정한 것과 같다.
즉, STRING은 VARCHAR(1,073,741,823)과 동일하다.
 
5. NCHAR(n)
 
고정길이 국가 문자 스트링은 NCHAR(n)로 나타내는데, 여기서 n은 문자의 개수를 나타낸다. 이 데이터 타입에 저장될 수 있는 문자 스트링은 앞에서 소개한 문자 세트여야 한다. 만약, n이 생략되면 길이는 디폴트 값 1로 지정된다. 만약, 스트링의 크기가 n을 넘어설 때, 넘어서는 부분이 공백문자인 경우에는 이를 절삭하고, 넘어서는 부분이 공백문자가 아닌 경우에는 오류로 처리된다. n보다 작은 문자 스트링이 저장될 때에는 나머지 부분이 공백문자로 채워진다. 어떤 언어의 문자 세트에서는 하나의 문자가 한 개 이상의 바이트로 저장되기 때문에 n을 바이트 크기로 보면 안된다. NCHAR에서 사용되는 로케일은 운영체제에 설정된 로케일 혹은 CUBRID_LANG 환경 변수 값으로 지정된다.
(NCHAR(n)와 NATIONAL CHAR(n), 그리고 NATIONAL CHARACTER(n)는 같은 의미로 사용된다.)
 
1) 참고 사항
 
n은 0보다 큰 숫자여야 한다.
 
하나의 데이터베이스에서 사용할 수 있는 국가 문자 코드 세트는 하나로 지정되어 있다. 예를 들어, 같은 데이터베이스에서 8비트 ISO 8889-1 Latin 코드 세트를 사용하면서 동시에 EUC 인코딩 코드 세트를 사용할 수는 없다.
 
국가 문자 스트링으로 선언된 속성에 고정이든 가변이든 일반 스트링을 지정하면 오류가 발생한다.
 
서로 다른 문자 코드 세트를 혼용하여 사용할 경우에도 오류가 발생한다.
 
2) 예제
NCHAR(8)에 N’Härder’를 지정하면 ’Härder  ’가 저장된다(6자리 문자 스트링과 공백문자 2개로 구성됨).
NCHAR(6)에 N’Härder  ’를 지정하면 ’Härder’가 저장된다(6을 넘어서는 부분이 공백문자이므로 이를 절삭하고 6자리 문자 스트링로 구성됨).
NCHAR에 N’Härder’를 지정하면 오류가 발생한다(디폴트 값 1보다 문자 스트링의 크기가 크기 때문에 오류 발생).
NCHAR(12)에 ’pacesetter’를 지정하면 오류가 발생한다(국가 문자 스트링으로 선언된 속성에 일반 스트링을 지정하면 오류 발생).
 
6. NCHAR VARYING(n)
 
가변길이의 국가 문자 스트링은 NCHAR VARYING(n)으로 나타낸다. 여기서 n은 문자의 개수를 나타낸다. NCHAR에서와 마찬가지로, 어떤 언어의 문자 세트에서는 하나의 문자가 1 이상의 바이트로 저장되기 때문에 n을 바이트 크기로 보면 안된다. 만약, n이 생략되면 최대 길이는 536,870,911로 지정된다. 만약, 문자 스트링의 크기가 n을 넘어설 때, 넘어서는 부분이 공백문자라면 이를 절삭하고, 넘어서는 부분이 공백문자가 아니라면 오류 처리된다. n보다 작은 문자 스트링이 저장될 때에는 나머지 부분이 공백문자로 채워지지 않는다. 즉, 꼭 필요한 만큼만 저장된다.
(NCHAR VARYING(n)와 NATIONAL CHAR VARYING(n), 그리고 NATIONAL CHARACTER VARYING(n)는 같은 의미로 사용된다.)
 
1) 참고 사항
 
n은 0보다 큰 숫자여야 한다.
 
하나의 데이터베이스에서 사용할 수 있는 국가 문자 코드 세트는 하나로 지정되어 있다.
예를 들어, 같은 데이터베이스에서 8-비트 ISO 8889-1 Latin 코드 세트를 사용하면서 동시에 JIS X 208의 EUC 인코딩 코드 세트를 사용할 수는 없다.
 
국가 문자 스트링으로 선언된 속성에 고정이든 가변이든 일반 스트링을 지정하면 오류가 발생한다.
 
서로 다른 문자 코드 세트를 혼용하여 사용할 경우에도 오류가 발생한다.
 
2) 예제
NCHAR VARYING(8)에 N’Härder’를 지정하면 ’Härder’가 저장된다(6자리 문자 스트링로 구성됨).
NCHAR VARYING(6)에 N’Härder’를 지정하면 ’Härder’가 저장된다(6자리 문자 스트링로 구성됨).
NCHAR VARYING(12)에 ’pacesetter’를 지정하면 오류가 발생한다(국가 문자 스트링으로 선언된 속성에 일반 스트링을 지정하면 오류가 발생).
 

- 강좌 URL : http://www.gurubee.net/lecture/2019

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입