--- title: "SQL to C: Character | Microsoft Docs" ms.custom: "" ms.date: "01/19/2019" ms.prod: sql ms.prod_service: connectivity ms.reviewer: "" ms.technology: connectivity ms.topic: conceptual helpviewer_keywords: - "converting data from SQL to C types [ODBC], character" - "character data type [ODBC]" - "data conversions from SQL to C types [ODBC], character" ms.assetid: 7fdb7f38-b64d-48f2-bcb4-1ca96b2bbdb6 author: David-Engel ms.author: v-daenge --- # SQL to C: Character The identifiers for the character ODBC SQL data types are the following: - SQL_CHAR - SQL_VARCHAR - SQL_LONGVARCHAR - SQL_WCHAR - SQL_WVARCHAR - SQL_WLONGVARCHAR The following table shows the ODBC C data types to which character SQL data may be converted. For an explanation of the columns and terms in the table, see [Converting Data from SQL to C Data Types](../../../odbc/reference/appendixes/converting-data-from-sql-to-c-data-types.md). |C type identifier|Test|TargetValuePtr|StrLen_or_IndPtr|SQLSTATE| |:----------------|:---|:-------------|:---------------|:-------| |SQL_C_CHAR|Byte length of data < *BufferLength*

Byte length of data >= *BufferLength*|Data

Truncated data|Length of data in bytes

Length of data in bytes|n/a

01004| |SQL_C_WCHAR|Character length of data < *BufferLength*

Character length of data >= *BufferLength*|Data

Truncated data|Length of data in characters

Length of data in characters|n/a

01004| |SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC|Data converted without truncation[b]

Data converted with truncation of fractional digits[a]

Conversion of data would result in loss of whole (as opposed to fractional) digits[a]

Data is not a *numeric-literal*[b]|Data

Truncated data

Undefined

Undefined|Number of bytes of the C data type

Number of bytes of the C data type

Undefined

Undefined|n/a

01S07

22003

22018| |SQL_C_FLOAT SQL_C_DOUBLE|Data is within the range of the data type to which the number is being converted[a]

Data is outside the range of the data type to which the number is being converted[a]

Data is not a *numeric-literal*[b]|Data

Undefined

Undefined|Size of the C data type

Undefined

Undefined|n/a

22003

22018| |SQL_C_BIT|Data is 0 or 1

Data is greater than 0, less than 2, and not equal to 1

Data is less than 0 or greater than or equal to 2

Data is not a *numeric-literal*|Data

Truncated data

Undefined

Undefined|1[b]

1[b]

Undefined

Undefined|n/a

01S07

22003

22018| |SQL_C_BINARY|Byte length of data <= *BufferLength*

Byte length of data > *BufferLength*|Data

Truncated data|Length of data in bytes

Length of data|n/a

01004| |SQL_C_TYPE_DATE|Data value is a valid *date-value*[a]

Data value is a valid *timestamp-value*; time portion is zero[a]

Data value is a valid *timestamp-value*; time portion is nonzero[a],[c]

Data value is not a valid *date-value* or *timestamp-value*[a]|Data

Data

Truncated data

Undefined|6[b]

6[b]

6[b]

Undefined|n/a

n/a

01S07

22018| |SQL_C_TYPE_TIME|Data value is a valid *time-value and the fractional seconds value is 0*[a]

Data value is a valid *timestamp-value or a valid time-value*; fractional seconds portion is zero[a],[d]

Data value is a valid *timestamp-value*; fractional seconds portion is nonzero[a],[d],[e]

Data value is not a valid *time-value* or *timestamp-value*[a]|Data

Data

Truncated data

Undefined|6[b]

6[b]

6[b]

Undefined|n/a

n/a

01S07

22018| |SQL_C_TYPE_TIMESTAMP|Data value is a valid *timestamp-value or a valid time-value*; fractional seconds portion not truncated[a]

Data value is a valid *timestamp-value or a valid time-value*; fractional seconds portion truncated[a]

Data value is a valid *date-value*[a]

Data value is a valid *time-value*[a]

Data value is not a valid *date-value*, *time-value*, or *timestamp-value*[a]|Data

Truncated data

Data[f]

Data[g]

Undefined|16[b]

16[b]

16[b]

16[b]

Undefined|n/a

01S07

n/a

n/a

22018| |All C interval types|Data value is a valid *interval value*; no truncation

Data value is a valid *interval value*; truncation of one or more trailing fields

Data is valid interval; leading field significant precision is lost

The data value is not a valid interval value|Data

Truncated data

Undefined

Undefined|Length of data in bytes

Length of data in bytes

Undefined

Undefined|n/a

01S07

22015

22018| | | | | | | [a] The value of *BufferLength* is ignored for this conversion. The driver assumes that the size of **TargetValuePtr* is the size of the C data type. [b] This is the size of the corresponding C data type. [c] The time portion of the *timestamp-value* is truncated. [d] The date portion of the *timestamp-value* is ignored. [e] The fractional seconds portion of the timestamp is truncated. [f] The time fields of the timestamp structure are set to zero. [g] The date fields of the timestamp structure are set to the current date. **Extra spaces** Leading and trailing spaces are ignored when SQL character data is converted to any of the following types: - date - numeric - time - timestamp - interval C data