데이터 형식 차이 이해

Java 프로그래밍 언어 데이터 형식과 SQL Server 데이터 형식 간에는 많은 차이가 있습니다. 하지만 Microsoft SQL Server JDBC 드라이버는 다양한 형식 변환 기능을 통해 이러한 차이를 손쉽게 극복합니다.

문자 형식

JDBC 문자열 데이터 형식은 CHAR, VARCHARLONGVARCHAR입니다. Microsoft SQL Server JDBC 드라이버 버전 2.0 이상에서는 JDBC 4.0 API가 지원됩니다. JDBC 4.0에서는 JDBC 문자열 데이터 형식이 NCHAR, NVARCHARLONGNVARCHAR가 될 수도 있습니다. 이러한 새 문자열 형식은 유니코드 형식으로 Java 네이티브 문자 형식을 유지하므로 ANSI와 Unicode 간 변환을 수행할 필요가 없습니다.

형식 설명

고정 길이

SQL Server charnchar 데이터 형식은 JDBC CHARNCHAR 형식에 직접 매핑됩니다. 이는 해당 열에 SET ANSI_PADDING ON이 설정된 경우 서버에서 패딩을 제공하는 고정 길이 형식입니다. nchar에 대해서는 패딩이 항상 설정되어 있지만 char에 대해서는 그렇지 않습니다. 서버 char 열이 패딩되지 않은 경우 JDBC 드라이버에서 패딩을 추가합니다.

가변 길이

SQL Server varcharnvarchar 형식은 각각 JDBC VARCHARNVARCHAR 형식에 직접 매핑됩니다.

Long

SQL Server textntext 형식은 각각 JDBC LONGVARCHARLONGNVARCHAR 형식에 매핑됩니다. 이러한 형식은 SQL Server 2005 및 SQL Server 2008에서는 더 이상 사용되지 않으므로 대신 큰 값 형식인 varchar(max) 또는 nvarchar(max)를 사용해야 합니다.

textntext 서버 열에 대해 update<Numeric Type>updateObject (int, java.lang.Object) 메서드를 사용하면 오류가 발생합니다. 그러나 textntext 서버 열에 대해 setObject 메서드를 지정된 문자 변환 형식과 함께 사용할 수 있습니다.

이진 문자열 형식

JDBC 이진 문자열 형식은 BINARY, VARBINARYLONGVARBINARY입니다.

형식 설명

고정 길이

SQL Server binary 형식은 JDBC BINARY 형식에 직접 매핑됩니다. 이는 해당 열에 SET ANSI_PADDING ON이 설정된 경우 서버에서 패딩을 제공하는 고정 길이 형식입니다. 서버 char 열이 패딩되지 않으면 JDBC 드라이버가 패딩을 추가합니다.

SQL Server timestamp 형식은 고정 길이가 8바이트인 JDBC BINARY 형식입니다.

가변 길이

SQL Server varbinary 형식은 JDBC VARBINARY 형식에 매핑됩니다.

SQL Server의 udt 형식은 JDBC에 VARBINARY 형식으로 매핑됩니다.

Long

SQL Server image 형식은 JDBC LONGVARBINARY 형식에 매핑됩니다. 이 형식은 SQL Server 2005 및 SQL Server 2008에서 사용되지 않는 형식이므로 대신 큰 값 형식인 varbinary(max)를 사용해야 합니다.

정확한 숫자 형식

JDBC의 정확한 숫자 형식은 해당되는 SQL Server 형식에 바로 매핑됩니다.

형식 설명

BIT

JDBC BIT 형식은 단일 비트(0 또는 1)를 나타냅니다. 이 형식은 SQL Server bit 형식에 매핑됩니다.

TINYINT

JDBC TINYINT 형식은 1바이트를 나타내며 SQL Server tinyint 형식에 매핑됩니다.

SMALLINT

JDBC SMALLINT 형식은 부호 있는 16비트 정수를 나타내며 SQL Server smallint 형식에 매핑됩니다.

INTEGER

JDBC INTEGER 형식은 부호 있는 32비트 정수를 나타내며 SQL Server int 형식에 매핑됩니다.

BIGINT

JDBC BIGINT 형식은 부호 있는 64비트 정수를 나타내며 SQL Server bigint 형식에 매핑됩니다.

NUMERIC

JDBC NUMERIC 형식은 동일한 전체 자릿수 값을 포함하는 고정 전체 자릿수 소수 값을 나타냅니다. NUMERIC 형식은 SQL Server numeric 형식에 매핑됩니다.

DECIMAL

JDBC DECIMAL 형식은 최소한 지정된 전체 자릿수 값을 포함하는 고정 전체 자릿수 소수 값을 나타냅니다. DECIMAL 형식은 SQL Server decimal 형식에 매핑합니다.

JDBC DECIMAL 형식도 SQL Server moneysmallmoney 형식에 매핑됩니다. 이 형식은 각각 8바이트와 4바이트로 저장되는 특정 고정 전체 자릿수 소수 형식입니다.

근사 숫자 형식

JDBC 근사 숫자 형식은 REAL, DOUBLEFLOAT입니다.

형식 설명

REAL

JDBC REAL 형식의 전체 자릿수는 7(단정밀도)이며 SQL Server real 형식에 직접 매핑됩니다.

DOUBLE

JDBC DOUBLE 형식의 전체 자릿수는 15(배정밀도)이며 SQL Server float 형식에 매핑됩니다. JDBC FLOAT 형식은 DOUBLE의 동의어입니다. FLOATDOUBLE을 함께 사용할 경우 혼동될 수 있으므로 DOUBLE을 사용하는 것이 좋습니다.

날짜 및 시간 형식

JDBC TIMESTAMP 형식은 SQL Server datetimesmalldatetime 형식에 매핑됩니다. datetime 형식은 두 개의 4바이트 정수로 저장됩니다. smalldatetime 형식은 2바이트 small 정수와 동일한 정보(날짜 및 시간)를 포함하지만 정확도는 떨어집니다.

참고

SQL Server timestamp 형식은 고정 길이 이진 문자열 형식이며 JDBC 시간 형식 DATE, TIME 또는 TIMESTAMP에 매핑되지 않습니다.

사용자 지정 형식 매핑

JDBC 고급 형식(UDT, Struct 등)에 대해 SQLData 인터페이스를 사용하는 JDBC의 사용자 지정 형식 매핑 기능은 JDBC 드라이버에 구현되어 있지 않습니다.

참고

관련 자료

JDBC 드라이버 데이터 형식 이해