SQL 데이터 형식

각 DBMS는 자체 SQL 형식을 정의합니다. 각 ODBC 드라이버는 연결된 DBMS가 정의하는 SQL 데이터 형식만 노출합니다. 드라이버가 DBMS SQL 형식을 ODBC 정의 SQL 형식 식별자에 매핑하는 방법 및 드라이버가 DBMS SQL 형식을 자체 드라이버별 SQL 형식 식별자에 매핑하는 방법에 대한 정보는 SQLGetTypeInfo 호출을 통해 반환됩니다. 또한 드라이버는 SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns 및 SQLSpecialColumns에 대한 호출을 통해 열 및 매개 변수의 데이터 형식을 설명할 때 SQL 데이터 형식을 반환합니다.

참고 항목

SQL 데이터 형식은 구현 설명자의 SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE 및 SQL_DESC_DATETIME_INTERVAL_CODE 필드에 포함됩니다. SQL 데이터 형식의 특징은 구현 설명자의 SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH 및 SQL_DESC_OCTET_LENGTH 필드에 포함됩니다. 자세한 내용은 이 부록의 뒷부분에 있는 데이터 형식 식별자 및 설명자를 참조하세요.

지정된 드라이버 및 데이터 원본이 반드시 이 부록에 정의된 모든 SQL 데이터 형식을 지원하지는 않습니다. 드라이버의 SQL 데이터 형식 지원은 드라이버가 준수하는 SQL-92 수준에 따라 달라집니다. 드라이버에서 지원하는 SQL-92 문법 수준을 결정하기 위해 애플리케이션은 SQL_SQL_CONFORMANCE 정보 유형을 사용하여 SQLGetInfo를 호출합니다. 또한 지정된 드라이버 및 데이터 원본은 드라이버별 추가 SQL 데이터 형식을 지원할 수 있습니다. 드라이버에서 지원하는 데이터 형식을 확인하기 위해 애플리케이션은 SQLGetTypeInfo를 호출합니다. 드라이버별 SQL 데이터 형식에 대한 자세한 내용은 드라이버 설명서를 참조하세요. 특정 데이터 원본의 데이터 형식에 대한 자세한 내용은 해당 데이터 원본에 대한 설명서를 참조하세요.

Important

이 부록 전체의 테이블은 지침일 뿐이며 일반적으로 사용되는 이름, 범위 및 SQL 데이터 형식의 제한을 표시합니다. 지정된 데이터 원본은 나열된 데이터 형식 중 일부만 지원할 수 있으며 지원되는 데이터 형식의 특성은 나열된 데이터 형식과 다를 수 있습니다.

다음 표에서는 모든 SQL 데이터 형식에 대한 유효한 SQL 형식 식별자를 나열합니다. 또한 이 표에는 SQL-92의 해당 데이터 형식에 대한 이름과 설명도 나열되어 있습니다(있는 경우).

SQL 형식 식별자[1] 일반적인 SQL 데이터

type[2]
일반적인 형식 설명
SQL_CHAR CHAR(n) 고정 문자열 길이 n의 문자열입니다.
SQL_VARCHAR VARCHAR(n) 최대 문자열 길이가 n인 가변 길이 문자열입니다.
SQL_LONGVARCHAR LONG VARCHAR 가변 길이 문자 데이터입니다. 최대 길이는 데이터 원본에 따라 다릅니다. [9]
SQL_WCHAR WCHAR(n) 고정 문자열 길이의 유니코드 문자열 n
SQL_WVARCHAR VARWCHAR(n) 최대 문자열 길이가 n인 유니코드 가변 길이 문자열
SQL_WLONGVARCHAR LONGWVARCHAR 유니코드 가변 길이 문자 데이터입니다. 최대 길이는 데이터 원본에 따라 다릅니다.
SQL_DECIMAL DECIMAL(p,s) 부호 있는 정확한 숫자 값으로, 전체 자릿수가 p 이상이고 소수 자릿수가 s입니다. (최대 정밀도는 드라이버 정의입니다.) (1 <= p<= 15; s<= p).[ 4]
SQL_NUMERIC NUMERIC(p,s) 전체 자릿수 p 및 소수 자릿수 있는 부호 있는 정확한 숫자 값(1 <= p<= 15; s<= p).[ 4]
SQL_SMALLINT SMALLINT 전체 자릿수가 5이고 소수 자릿수가 0인 정확한 숫자 값(부호 있음: -32,768 <= n<= 32,767, 부호 없음: 0 <= n<= 65,535)[3].
SQL_INTEGER INTEGER 전체 자릿수가 10이고 소수 자릿수가 0인 정확한 숫자 값(부호 있음: -2[31] <= n<= 2[31] - 1, 부호 없음: 0 <= n<= 2[32] - 1)[3].
SQL_REAL REAL 이진 정밀도 24(0 또는 절대값 10[-38]에서 10[38])로 부호 있는 근사치 숫자 값입니다.
SQL_FLOAT FLOAT(p) 이진 전체 자릿수가 p 이상인 부호 있는 근사치 숫자 값입니다. (최대 정밀도는 드라이버 정의입니다.) [5]
SQL_DOUBLE 배정밀도 이진 정밀도 53(0 또는 절대 값 10[-308]에서 10[308])으로 부호 있는 근사값입니다.
SQL_BIT BIT 단일 비트 이진 데이터입니다. [8]
SQL_TINYINT TINYINT 전체 자릿수가 3이고 소수 자릿수가 0인 정확한 숫자 값(부호 있음: -128 <= n<= 127, 부호 없음: 0 <= n<= 255)[3].
SQL_BIGINT BIGINT 전체 자릿수가 19(부호 없는 경우) 또는 20(서명되지 않은 경우) 및 소수 자릿수 0(부호 있는 경우: -2[63] = n<= 2[63] <- 1, 부호 없는 정확한 숫자 값: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) 고정 길이 n.[의 이진 데이터 9]
SQL_VARBINARY VARBINARY(n) 최대 길이 n의 가변 길이 이진 데이터입니다. 최대값은 사용자가 설정합니다. [9]
SQL_LONGVARBINARY LONG VARBINARY 가변 길이 이진 데이터입니다. 최대 길이는 데이터 원본에 따라 다릅니다. [9]
SQL_TYPE_DATE[6] DATE 그레고리오력의 규칙을 준수하는 연도, 월 및 일 필드입니다. (참조) 이 부록의 뒷부분에 있는 그레고리오력의 제약 조건입니다.)
SQL_TYPE_TIME[6] TIME(p) 시간, 분 및 두 번째 필드( 00~23시간의 유효한 값, 00~59분의 유효한 값, 00~61초의 유효한 값) 전체 자릿수 p 는 초 정밀도를 나타냅니다.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) DATE 및 TIME 데이터 형식에 대해 정의된 유효한 값이 있는 연도, 월, 일, 시간, 분 및 두 번째 필드입니다.
SQL_TYPE_UTCDATETIME UTCDATETIME 연도, 월, 일, 시간, 분, 초, utchour 및 utcminute 필드입니다. utchour 및 utcminute 필드는 1/10 마이크로초 정밀도입니다.
SQL_TYPE_UTCTIME UTCTIME 시간, 분, 초, utchour 및 utcminute 필드입니다. utchour 및 utcminute 필드는 1/10 마이크로초 정밀도입니다.
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) 두 날짜 사이의 월 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) 두 날짜 사이의 연도 수입니다. p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO MONTH 두 날짜 사이의 연도 및 월 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) 두 날짜 사이의 일 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) 두 날짜/시간 사이의 시간 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) 두 날짜/시간 사이의 분 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) 두 날짜/시간 사이의 초 수; p 는 전체 자릿수를 선도하는 간격이고 q 는 간격 초 정밀도입니다.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR 두 날짜/시간 사이의 일/시간 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE 두 날짜/시간 사이의 일/시간/분 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) 두 날짜/시간 사이의 일/시간/분/초 수; p 는 전체 자릿수를 선도하는 간격이고 q 는 간격 초 정밀도입니다.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE 두 날짜/시간 사이의 시간/분 수; p 는 전체 자릿수를 선도하는 간격입니다.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) 두 날짜/시간 사이의 시간/분/초 수; p 는 전체 자릿수를 선도하는 간격이고 q 는 간격 초 정밀도입니다.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) 두 날짜/시간 사이의 분/초 수; p 는 전체 자릿수를 선도하는 간격이고 q 는 간격 초 정밀도입니다.
SQL_GUID GUID 고정 길이 GUID입니다.

[1] SQLGetTypeInfo를 호출하여 DATA_TYPE 열에서 반환되는 값입니다.

[2] SQLGetTypeInfo를 호출하여 NAME 및 CREATE PARAMS 열에 반환되는 값입니다. NAME 열은 CHAR와 같은 지정을 반환하는 반면 CREATE PARAMS 열은 전체 자릿수, 소수 자릿수 및 길이와 같은 생성 매개 변수의 쉼표로 구분된 목록을 반환합니다.

[3] 애플리케이션은 SQLGetTypeInfo 또는 SQLColAttribute를 사용하여 결과 집합의 특정 데이터 형식 또는 특정 열이 서명되지 않았는지 여부를 확인합니다.

[4] SQL_DECIMAL 및 SQL_NUMERIC 데이터 형식은 전체 자릿수만 다릅니다. DECIMAL(p,s)의 전체 자릿수는 p보다 작지 않은 구현 정의 10진수 정밀도인 반면 NUMERIC(p,s)의 전체 자릿수는 p정확히 같습니다.

[5] 구현에 따라 SQL_FLOAT 정밀도는 24 또는 53일 수 있습니다. 24이면 SQL_FLOAT 데이터 형식은 SQL_REAL; 53이면 SQL_FLOAT 데이터 형식은 SQL_DOUBLE 동일합니다.

[6] ODBC 3.x에서 SQL 날짜, 시간 및 타임스탬프 데이터 형식은 각각 SQL_TYPE_DATE, SQL_TYPE_TIME 및 SQL_TYPE_TIMESTAMP, ODBC 2.x에서는 데이터 형식이 SQL_DATE, SQL_TIME 및 SQL_TIMESTAMP.

[7] 간격 SQL 데이터 형식에 대한 자세한 내용은 이 부록의 뒷부분에 있는 간격 데이터 형식 섹션을 참조하세요.

[8] SQL_BIT 데이터 형식의 특성은 SQL-92의 BIT 형식과 다릅니다.

[9] 이 데이터 형식은 SQL-92에 해당 데이터 형식이 없습니다.

이 섹션에서는 다음 예제를 제공합니다.