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 데이터 형식에 바인딩하지 않는 것이 좋습니다. 이 변환은 일반적으로 비효율적이며 느립니다.