Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.1 |  CUBRID 9.0.0 | 

구문/타입 관련 파라미터

다음은 CUBRID에서 지원하는 SQL 구문 및 데이터 타입에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름

타입

기본값

최소값

최대값

add_column_update_hard_default

bool

no

 

 

alter_table_change_type_strict

bool

no

 

 

ansi_quotes

bool

yes

 

 

block_ddl_statement

bool

no

 

 

block_nowhere_statement

bool

no

 

 

compat_numeric_division_scale

bool

no

 

 

default_week_format

int

0

 

 

group_concat_max_len

int

1024

4

33554432

intl_check_input_string

bool

no

intl_date_lang

string

intl_number_lang

string

no_backslash_escapes

bool

yes

 

 

only_full_group_by

bool

no

 

 

oracle_style_empty_string

bool

no

 

 

pipes_as_concat

bool

yes

 

 

plus_as_concat

bool

yes

 

 

require_like_escape_character

bool

no

 

 

return_null_on_function_errors

bool

no

 

 

string_max_size_bytes

int

1048576

64

33554432

unicode_input_normalization

bool

no

 

 

unicode_output_normalization

bool

no

 

 

add_column_update_hard_default

add_column_update_hard_defaultALTER TABLE … ADD COLUMN 절로 새로운 칼럼을 추가할 때 이 칼럼에 입력할 값을 고정 기본값(hard_default)으로 제공할지 여부를 설정하는 파라미터로서, 기본값은 no이다.

이 파라미터 값이 yes이면 NOT NULL 제약 조건이 있고 DEFAULT 제약 조건이 없을 때 칼럼의 새로운 입력값을 고정 기본값(hard default value)으로 입력하며, no이면 NOT NULL 제약조건이 있더라도 NULL로 입력한다. 이 파라미터의 값이 yes일 때 추가하려는 칼럼의 타입에 고정 기본값이 없으면 오류를 출력하고 롤백한다. 각 타입별 고정 기본값에 대해서는 ALTER TABLE 문의 CHANGE, MODIFY 절을 참고한다.

-- add_column_update_hard_default=no

 

CREATE TABLE tbl (i INT);

INSERT INTO tbl VALUES (1),(2);

ALTER TABLE tbl ADD COLUMN j INT NOT NULL;

 

SELECT * FROM TBL;

 

            i          j

========================

            2       NULL

            1       NULL

 

-- add_column_update_hard_default=yes

 

CREATE TABLE tbl (i int);

INSERT INTO tbl VALUES (1),(2);

ALTER TABLE tbl ADD COLUMN j INT NOT NULL;

 

SELECT * FROM tbl;

 

            i          j

=========================

            2          0

            1          0

alter_table_change_type_strict

alter_table_change_type_strict는 타입 변경에 따른 해당 칼럼 값들의 변환 허용 여부를 지정하는 파라미터로서, 기본값은 no이다. 이 파라미터 값이 no이면 칼럼의 타입 변경이나 NOT NULL 제약 조건을 추가할 때 값의 변경이 발생하며, yes이면 값의 변경이 발생하지 않는다. 자세한 내용은 ALTER TABLE 문의 CHANGE, MODIFY 절을 참고한다.

ansi_quotes

ansi_quotes는 식별자 처리를 위한 기호 또는 문자열을 감싸는 기호에 관한 파라미터로 기본값은 yes이다. 이 파라미터 값이 yes이면 큰따옴표는 식별자 처리 기호로 해석되고, 작은따옴표는 문자열 처리 기호로 해석된다. 이 값이 no이면 큰 따옴표와 작은 따옴표 모두 문자열 처리 기호로 해석된다.

block_ddl_statement

block_ddl_statement는 클라이언트가 수행하는 데이터 정의문(Data Definition Language, DDL)을 제한하기 위한 파라미터로 no로 설정하면 해당 클라이언트의 데이터 정의문 수행을 허용하며, yes로 설정하면 해당 클라이언트의 데이터 정의문 수행을 허용하지 않는다. 기본값은 no이다.

block_nowhere_statement

block_nowhere_statement는 클라이언트가 수행하는 조건절(WHERE)이 없는 UPDATE/DELETE 문을 제한하기 위한 파라미터로 no로 설정하면 해당 클라이언트의 조건절이 없는 UPDATE/DELETE 문을 허용하며, yes로 설정하면 해당 클라이언트의 조건절이 없는 UPDATE/DELETE 문의 수행을 허용하지 않는다. 기본값은 no이다.

compat_numeric_division_scale

compat_numeric_division_scale은 나눗셈 연산의 결과 값(몫)에 대하여 소수점 이하 자릿수를 몇 자리까지 표시할 것인가를 지정하기 위한 파라미터로 no로 설정하면 몫의 소수점 이하 자릿수가 9개가 되고, yes로 설정하면 몫의 소수점 이하 자릿수가 피연산자의 소수점 이하 자릿수에 따라 결정된다. 기본값은 no이다.

default_week_format

default_week_formatWEEK 함수 mode 인자의 기본값을 설정한다. 기본값은 0이다. 자세한 내용은 WEEK 함수를 참고한다.

group_concat_max_len

group_concat_max_lenGROUP_CONCAT 함수의 리턴 값의 크기를 제한하는 파라미터로서 기본값은 1024바이트이며, 최소값은 4바이트, 최대값은 33,554,432바이트이다. GROUP_CONCAT 함수의 결과가 제한을 넘으면 NULL을 반환한다.

intl_check_input_string

intl_check_input_string은 입력되는 문자열이 사용하는 문자셋에 맞게 입력되는지에 대한 검사 여부를 설정하는 파라미터이다. 기본값은 no이다. 예를 들어, 이 값이 no이고 문자셋이 UTF-8일 때 UTF-8 바이트 순서(byte sequence)에 맞지 않는 데이터가 들어오는 경우 비정상적인 동작을 보이거나 심하면 데이터베이스 서버 혹은 응용 프로그램이 비정상 종료될 수도 있다. 하지만 이러한 문제가 없다는 것이 보장된다면 검사하지 않는 것이 성능상 좀더 유리하다.

UTF-8과 EUC-KR만이 검사 대상이며, ISO-8859-1은 한 바이트 인코딩이고 모든 바이트가 유효하므로 검사할 필요가 없다.

intl_date_lang

intl_date_langTIME, DATE, DATETIME, TIMESTAMP 타입의 값을 입력 또는 출력하는 함수의 인자로 언어 이름이 생략되는 경우, 문자열의 지역화된(localized) 캘린더(월 이름과 요일 이름, 오전/오후 이름) 형식을 지정하는 파라미터이다.

사용할 수 있는 값은 다음과 같다. 단, 이 값들을 모두 사용하려면 내장된 로캘(locale)을 제외한 나머지 로캘에 대해서는 원하는 로캘 라이브러리를 설정해야 한다. 로캘 설정에 대해서는 관리자 안내서 > 다국어 지원 > 로캘(locale) 설정을 참고한다.

언어

언어의 로캘 이름

영어

en_US

독일어

de_DE

스페인어

es_ES

프랑스어

fr_FR

이태리어

it_IT

일본어

ja_JP

캄보디아어

km_KH

한국어

ko_KR

터키어

tr_TR

베트남어

vi_VN

중국어

zh_CN

지정된 언어의 캘린더 형식에 따라 입력 문자열을 인식하는 함수는 다음과 같다.

  • TO_DATE
  • TO_TIME
  • TO_DATETIME
  • TO_TIMESTAMP
  • STR_TO_DATE

지정된 언어의 캘린더 형식에 따라 문자열을 출력하는 함수는 다음과 같다.

  • TO_CHAR(date)
  • DATE_FORMAT
  • TIME_FORMAT
intl_number_lang

intl_number_lang은 문자열을 숫자로, 또는 숫자를 문자열로 변환하는 함수들에서 입력되거나 출력되는 문자열에 숫자 형식을 부여할 때 적용할 로캘을 지정하는 파라미터이다. 숫자에 대해 지역화되는 것들은 자릿수 구분 기호와 소수점 기호이다. 일반적으로는 쉼표(,)와 마침표(.)가 쓰이는데, 로캘에 따라 서로 바뀔 수 있다. 예를 들어, 숫자 1000.12(천 소수점 이하 일이)는 대부분의 로캘에서는 1,000.12로 쓰이는 반면, tr_TR 로캘에서는 1.000,12로 쓰인다.

지정된 언어의 숫자 형식에 따라 입력 문자열을 인식하는 함수는 다음과 같다.

  • TO_NUMBER

지정된 언어의 숫자 형식에 따라 문자열을 출력하는 함수는 다음과 같다.

  • FORMAT
  • TO_CHAR(number)
no_backslash_escapes

no_backslash_escapes은 이스케이프 문자로 백슬래시() 사용 여부에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 no이면 백슬래시()가 이스케이프 문자로 사용되며, yes이면 백슬래시는 일반 문자로 사용된다. 자세한 설명은 특수 문자 이스케이프를 참고한다.

only_full_group_by

only_full_group_byGROUP BY 절 사용에 관한 확장된 문법의 사용 여부를 설정하는 파라미터이다.

이 파라미터 값이 no이면 확장된 문법이 적용되므로 GROUP BY 절에 명시되지 않은 칼럼을 SELECT 칼럼 리스트에 명시할 수 있고, 이 값이 yes이면 GROUP BY 절에 명시된 칼럼만 SELECT 칼럼 리스트에 명시할 수 있다.

기본값은 no이므로, SQL 표준에 따라 질의를 수행하려면 only_full_group_by 파라미터 값을 yes로 설정한다. 이 경우에는 확장된 문법이 적용되지 않으므로 실행 결과로 아래와 같은 에러가 출력된다.

ERROR: Attributes exposed in aggregate queries must also appear in the group by clause.

oracle_style_empty_string

oracle_style_empty_string은 다른 DBMS(Database Management System)와의 호환성을 향상시키기 위한 파라미터로 빈 문자열(empty string)을 Oracle DBMS와 마찬가지로 NULL로 처리할 것인지 지정한다. oracle_style_empty_string 파라미터를 no로 설정하면 빈 문자열을 유효한 문자열로 처리하고, yes로 설정하면 Oracle DBMS와 마찬가지로 빈 문자열을 NULL로 처리한다.

pipes_as_concat

pipes_as_concat은 이중 파이프 기호(||)의 사용에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 yes이면 이중 파이프 기호가 문자열의 병합 연산자로 해석되고, no이면 부울린(boolean) 연산자인 OR로 해석된다.

plus_as_concat

plus_as_concat+ 연산자의 사용에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 yes이면 + 연산자가 문자열의 병합 연산자로 해석되고, no이면 수치 연산자로 해석된다.

-- plus_as_concat = yes

SELECT '1'+'1';

         '1'+'1'

======================

         '11'  SELECT '1'+'a';

 

         '1'+'a'

======================

         '1a'

 

-- plus_as_concat = no

SELECT '1'+'1';

                '1'+'1'

==========================

 2.000000000000000e+000

 

SELECT '1'+'a';

 

ERROR: Cannot coerce 'a' to type double.

require_like_escape_character

require_like_escape_characterLIKE 절의 이스케이프 문자 사용 여부에 관한 파라미터로서, 기본값은 no이다. 이 파라미터 값이 yes이고 no_backslash_escapes가 no이면 LIKE 절의 문자열에서 백슬래시()가 이스케이프 문자로 사용되며, 그렇지 않으면 LIKE… ESCAPE 절을 사용하여 이스케이프 문자를 명시해야 한다. 자세한 내용은 LIKE 조건식을 참고한다.

return_null_on_function_errors

return_null_on_function_errors는 일부 SQL 함수에서 에러가 발생할 때의 동작을 정의하는 파라미터로서, 기본값은 no이다. 이 파라미터 값이 yes이면 함수에서 에러가 발생할 때 NULL을 반환하며, no이면 함수에서 에러가 발생할 때 에러를 반환하고 관련 메시지를 출력한다.

다음 SQL 함수가 이 시스템 파라미터의 영향을 받는다.

  • ADDDATE
  • ADDTIME
  • DATEDIFF
  • DAY
  • DAYOFMONTH
  • DAYOFWEEK
  • DAYOFYEAR
  • FROM_DAYS
  • FROM_UNIXTIME
  • HOUR
  • LAST_DAY
  • MAKEDATE
  • MAKETIME
  • MINUTE
  • MONTH
  • QUARTER
  • SEC_TO_TIME
  • SECOND
  • TIME
  • TIME_TO_SEC
  • TIMEDIFF
  • TO_DAYS
  • WEEK
  • WEEKDAY
  • YEAR

-- return_null_on_function_errors=no

 

SELECT YEAR('12:34:56');

ERROR: Conversion error in time format.

 

-- return_null_on_function_errors=yes

 

SELECT YEAR('12:34:56');

 

   year('12:34:56')

======================

   NULL

string max_size_bytes

string_max_size_bytes는 문자열 함수 또는 연산에서 문자열 인자로 사용할 수 있는 최대 바이트 크기를 정의하는 파라미터로, 기본값은 1048576(1 MB)이다. 최소값은 64바이트, 최대값은 33554432바이트(32 MB)이다.

이 파라미터에 영향을 받는 함수 및 연산식은 다음과 같다.

  • SPACE
  • CONCAT
  • CONCAT_WS
  • '+' : 문자열이 피연산자
  • REPEAT
  • GROUP_CONCAT : 이 함수는 string_max_size_bytes 파라미터뿐만 아니라 group_concat_max_len 파라미터의 영향도 받는다.
  • INSERT 함수
unicode_input_normalization

시스템 수준에서 입력할 유니코드를 결합된 코드로 저장할지 여부를 설정하는 파라미터로 기본값은 no이다.

일반적으로 유니코드 텍스트는 "완전히 결합된(fully composed)" 혹은 "완전히 분해된(fully decomposed)" 상태로 저장될 수 있다. 예를 들면 "완전히 결합된" 문자 'Ä'는 하나의 코드포인트인 00C4를 갖는데, 이는 UTF-8 인코딩으로 C3 84의 2바이트가 된다. 이와 달리 "완전히 분해된" 모드에서는 두 개의 코드포인트/문자 0041(문자 "A")과 0308(COMBINING DIAERESIS)이 되며, UTF-8 인코딩으로는 41 CC 88의 3바이트가 된다.

CUBRID는 완전히 결합된 유니코드만 가지고 동작할 수 있다. 완전히 분해된 문자열을 가진 응용 클라이언트에 대해서는 unicode_input_normalization의 값을 yes로 설정하여 완전히 결합된 코드로 변환하여 동작한 후 unicode_output_normalization의 값을 yes로 설정하여 다시 완전히 분해된 텍스트로 되돌려줄 수 있다. 일반적으로 유니코드 정규화는 결합 이후 분해 시 역변환이 불가능하지만 CUBRID는 가능한 한 많은 문자들의 역변환을 가능하게 하기 위해 간략화한 유니코드 정규화 방식을 적용한다. CUBRID 정규화의 특징은 다음과 같다.

  • 정규화는 언어 특징적인 요소가 아니며 로캘에 의존하지 않는다.

    일단 하나 이상의 로캘을 사용할 수 있다면, 모든 CAS/CSQL 프로세스에서 이를 사용할 수 있다. 하지만 정규화는 CUBRID 서버 프로세스에 적용되는 것이 아니다. unicode_input_normalization 시스템 파라미터는 시스템 수준에서 정규화에 의한 입력 코드의 결합 여부를 지정한다. unicode_output_normalization 시스템 파라미터는 시스템 수준에서 정규화에 의한 출력 코드의 분해 여부를 지정한다.

  • 콜레이션과 정규화는 직접 관련이 없다.

    unicode_input_normalization 값이 no임에도 불구하고, 확장이 있는 콜레이션(utf8_de_exp, utf8_jap_exp, utf8_km_exp) 문자열이 완전히 분해된 상태에서 제대로 정렬되지만 이는 의도한 사항이 아니며 UCA(Unicode Collation Algorithm)의 우연한 효과(side-effect)일 뿐이다. 확장이 있는 콜레이션은 오직 완전히 결합된 텍스트만 가지고 동작하도록 구현되었다.

  • CUBRID에서 유니코드 정규화를 위한 결합(composition)과 분해(decomposition)는 별개로 동작하지 않는다.

    주로 사용되는 경우는 unicode_input_normalizationunicode_output_normalization이 둘 다 yes인 경우로, 응용 클라이언트로부터 입력되는 코드를 결합된 코드로 저장하고 분해된 코드로 출력한다. 두 번째로 사용되는 경우는 unicode_input_normalization=yes이고 unicode_output_normalization=no인 경우로, 응용 클라이언트로부터 입력되는 코드를 결합된 코드로 저장하고 결합된 코드로 출력한다.

로캘과 콜레이션에 대한 자세한 설명은 관리자 안내서 > 다국어 지원을 참고한다.

unicode_output_normalization

시스템 수준에서 저장된 유니코드를 분해된 코드로 출력할 것인지 여부를 설정하는 파라미터로 기본값은 no이다. 보다 자세한 설명은 위 unicode_input_normalization의 설명을 참고한다.