C zu SQL: Zeichen
Die Bezeichner für den ODBC C-Zeichendatentyp sind:
SQL_C_CHAR
SQL_C_WCHAR
Die folgende Tabelle zeigt die ODBC SQL-Datentypen, in die C-Zeichendaten konvertiert werden können. Eine Erläuterung der Spalten und Begriffe in der Tabelle finden Sie unter Konvertieren von Daten aus C in SQL-Datentypen.
Hinweis
Wenn Zeichen-C-Daten in Unicode-SQL-Daten konvertiert werden, muss die Länge der Unicode-Daten eine gerade Zahl sein.
SQL-Typbezeichner | Test | SQLSTATE |
---|---|---|
SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR |
Bytelänge der Daten <= Spaltenlänge. Bytelänge der Daten > Spaltenlänge. |
– 22001 |
SQL_WCHAR SQL_WVARCHAR SQL_WLONGVARCHAR |
Zeichenlänge der Daten <= Spaltenlänge. Zeichenlänge der Daten > Spaltenlänge. |
– 22001 |
SQL_DECIMAL SQL_NUMERIC SQL_TINYINT SQL_SMALLINT SQL_INTEGER SQL_BIGINT |
Konvertierte Daten ohne Abschneiden Konvertierte Daten mit Abschneiden von Teilziffern[e] Die Konvertierung von Daten würde zum Verlust ganzer (im Gegensatz zu bruchbehafteten) Ziffern führen[e] Der Datenwert ist kein numerisches Literal. |
– 22001 22001 22018 |
SQL_REAL SQL_FLOAT SQL_DOUBLE |
Die Daten liegen innerhalb des Bereichs des Datentyps, in den die Zahl konvertiert wird. Daten liegen außerhalb des Bereichs des Datentyps, in den die Zahl konvertiert wird. Der Datenwert ist kein numerisches Literal. |
– 22003 22018 |
SQL_BIT | Daten sind 0 oder 1 Daten sind größer als 0, kleiner als 2 und nicht gleich 1 Daten sind kleiner als 0 oder größer als oder gleich 2 Daten sind kein numerisches Literal |
– 22001 22003 22018 |
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY |
(Bytelänge der Daten) / 2 <= Spaltenbytelänge (Bytelänge der Daten) / 2 > Spaltenbytelänge Der Datenwert ist kein Hexadezimalwert. |
– 22001 22018 |
SQL_TYPE_DATE | Der Datenwert ist ein gültiges ODBC-Datumsliteral. Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Zeitanteil ist 0 (null) Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Der Zeitanteil ist ungleich null[a] Der Datenwert ist kein gültiges ODBC-Date-Literal oder ODBC-timestamp-literal. |
– – 22008 22018 |
SQL_TYPE_TIME | Der Datenwert ist ein gültiges ODBC-Time-Literal. Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile sind null[b] Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile sind ungleich null[b] Der Datenwert ist kein gültiges ODBC-Time-Literal oder ODBC-timestamp-literal. |
– – 22008 22018 |
SQL_TYPE_TIMESTAMP | Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile nicht abgeschnitten Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile abgeschnitten Der Datenwert ist ein gültiger ODBC-date-literal[c] Der Datenwert ist ein gültiges ODBC-Time-Literal[d] Der Datenwert ist kein gültiges ODBC-Date-Literal, ODBC-Time-Literal oder ODBC-timestamp-literal. |
– 22008 – – 22018 |
Alle SQL-Intervalltypen | Der Datenwert ist ein gültiger Intervallwert. es tritt keine Abschneidung auf. Der Datenwert ist ein gültiger Intervallwert. Der Wert in einem der Felder wird abgeschnitten. Der Datenwert ist kein gültiges Intervallliteral. |
– 22015 22018 |
[a] Der Zeitteil des Zeitstempels wird abgeschnitten.
[b] Der Datumsteil des Zeitstempels wird ignoriert.
[c] Der Zeitteil des Zeitstempels ist auf Null festgelegt.
[d] Der Datumsteil des Zeitstempels ist auf das aktuelle Datum festgelegt.
[e] Der Treiber/die Datenquelle wartet effektiv, bis die gesamte Zeichenfolge empfangen wurde (auch wenn die Zeichendaten in Teilen durch Aufrufe von SQLPutData gesendet werden), bevor versucht wird, die Konvertierung durchzuführen.
Wenn Zeichen-C-Daten in numerische, Datums-, Uhrzeit- oder Zeitstempel-SQL-Daten konvertiert werden, werden führende und nachfolgende Leerzeichen ignoriert.
Wenn Zeichen-C-Daten in binäre SQL-Daten konvertiert werden, werden alle zwei Bytes von Zeichendaten in ein einzelnes Byte (8 Bit) binärer Daten konvertiert. Alle zwei Bytes von Zeichendaten stellen eine Zahl in hexadezimaler Form dar. Beispielsweise wird "01" in eine binäre 00000001 und "FF" in eine binäre 11111111 konvertiert.
Der Treiber konvertiert Paare von Hexadezimalstellen immer in einzelne Bytes und ignoriert das Byte mit null-Terminierung. Aus diesem Grund wird, wenn die Länge der Zeichenfolge ungerade ist, das letzte Byte der Zeichenfolge (mit Ausnahme des Null-Terminierungsbytes, falls vorhanden) nicht konvertiert.
Hinweis
Anwendungsentwickler werden davon abgeraten, C-Zeichendaten an einen binären SQL-Datentyp zu binden. Diese Konvertierung ist in der Regel ineffizient und langsam.