다음을 통해 공유


C에서 SQL로: 문자

문자 ODBC C 데이터 형식의 식별자는 다음과 같습니다.

SQL_C_CHAR

SQL_C_WCHAR

다음 표에서는 C 문자 데이터를 변환할 수 있는 ODBC SQL 데이터 형식을 보여줍니다. 테이블의 열 및 용어에 대한 설명은 C에서 SQL 데이터 형식으로 데이터 변환을 참조 하세요.

참고 항목

문자 C 데이터를 유니코드 SQL 데이터로 변환하는 경우 유니코드 데이터의 길이는 짝수여야 합니다.

SQL 형식 식별자 테스트 SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
데이터의 <바이트 길이 = 열 길이입니다.

데이터 > 열 길이의 바이트 길이입니다.
해당 없음

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
데이터의 <문자 길이 = 열 길이입니다.

데이터 > 열 길이의 문자 길이입니다.
해당 없음

22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
잘림 없이 변환된 데이터

소수 자릿수 잘림으로 변환된 데이터[e]

데이터를 변환하면 소수 자릿수가 아닌 전체 자릿수가 손실됩니다.[e]

데이터 값이 숫자 리터럴이 아닙니다.
해당 없음

22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
데이터는 숫자가 변환되는 데이터 형식의 범위 내에 있습니다.

데이터가 숫자가 변환되는 데이터 형식의 범위를 벗어났습니다.

데이터 값이 숫자 리터럴이 아닙니다.
해당 없음

22003

22018
SQL_BIT 데이터는 0 또는 1입니다.

데이터가 0보다 크고 2보다 작으며 1과 같지 않음

데이터가 0보다 작거나 2보다 크거나 같음

데이터가 숫자 리터럴이 아닙니다.
해당 없음

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(데이터의 바이트 길이) / 2 <= 열 바이트 길이

(데이터의 바이트 길이) / 2 > 열 바이트 길이

데이터 값이 16진수 값이 아닙니다.
해당 없음

22001

22018
SQL_TYPE_DATE 데이터 값은 유효한 ODBC 날짜 리터럴입니다.

데이터 값은 유효한 ODBC-timestamp-literal이며 시간 부분은 0입니다.

데이터 값은 유효한 ODBC-timestamp-literal입니다. 시간 부분은 0이 아닌 값입니다.[a]

데이터 값이 유효한 ODBC-date-literal 또는 ODBC-timestamp-literal가 아닙니다.
해당 없음

해당 없음

22008

22018
SQL_TYPE_TIME 데이터 값은 유효한 ODBC 시간 리터럴입니다.

데이터 값은 유효한 ODBC-timestamp-literal입니다. 소수 자릿수 초 부분은 0입니다.[b]

데이터 값은 유효한 ODBC-timestamp-literal입니다. 소수 자릿수 초 부분은 0이 아닌 경우[b]

데이터 값이 유효한 ODBC 시간 리터럴 또는 ODBC-timestamp-literal이 아닙니다.
해당 없음

해당 없음

22008

22018
SQL_TYPE_TIMESTAMP 데이터 값은 유효한 ODBC-timestamp-literal입니다. 소수 자릿수 초 부분이 잘리지 않음

데이터 값은 유효한 ODBC-timestamp-literal입니다. 소수 자릿수 초 부분이 잘렸습니다.

데이터 값이 유효한 ODBC-date-literal입니다.[c]

데이터 값은 유효한 ODBC-time-literal입니다.[d]

데이터 값이 유효한 ODBC-date-literal, ODBC-time-literal 또는 ODBC-timestamp-literal가 아닙니다.
해당 없음

22008

해당 없음

해당 없음

22018
모든 SQL 간격 유형 데이터 값은 유효한 간격 값이며 잘림이 발생하지 않습니다.

데이터 값은 유효한 간격 값입니다. 필드 중 하나의 값이 잘립니다.

데이터 값이 유효한 간격 리터럴이 아닙니다.
해당 없음

22015

22018

[a] 타임스탬프의 시간 부분이 잘립니다.

[b] 타임스탬프의 날짜 부분은 무시됩니다.

[c] 타임스탬프의 시간 부분이 0으로 설정됩니다.

[d] 타임스탬프의 날짜 부분이 현재 날짜로 설정됩니다.

[e] 드라이버/데이터 원본은 변환을 수행하기 전에 전체 문자열이 수신될 때까지(문자 데이터가 SQLPutData에 대한 호출을 통해 하나씩 전송되더라도) 효과적으로 대기합니다.

문자 C 데이터를 숫자, 날짜, 시간 또는 타임스탬프 SQL 데이터로 변환하면 선행 및 후행 공백이 무시됩니다.

문자 C 데이터가 이진 SQL 데이터로 변환되면 문자 데이터의 각 2바이트가 이진 데이터의 단일 바이트(8비트)로 변환됩니다. 문자 데이터의 각 2바이트는 16진수 형식의 숫자를 나타냅니다. 예를 들어 "01"은 이진 00000001 변환되고 "FF"는 이진 11111111 변환됩니다.

드라이버는 항상 16진수 쌍을 개별 바이트로 변환하고 null 종료 바이트를 무시합니다. 이 때문에 문자열의 길이가 홀수이면 문자열의 마지막 바이트(null 종료 바이트(있는 경우 제외)가 변환되지 않습니다.

참고 항목

애플리케이션 개발자는 C 문자를 이진 SQL 데이터 형식에 바인딩하지 않는 것이 좋습니다. 이 변환은 일반적으로 비효율적이며 느립니다.