Поделиться через


Преобразование из C в SQL: символы

Идентификаторы для символьного типа данных ODBC C:

SQL_C_CHAR

SQL_C_WCHAR

В следующей таблице показаны типы данных SQL ODBC, в которые могут быть преобразованы символьные данные C. Описание столбцов и терминов в таблице см. в разделе "Преобразование данных из 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 > длины байтов столбца

Значение данных не является шестнадцатеричным значением
Недоступно

22001

22018
SQL_TYPE_DATE Значение данных — допустимый литерал ODBC-date-литерал

Значение данных является допустимым литералом метки времени ODBC; часть времени равна нулю.

Значение данных является допустимым литералом метки времени ODBC; часть времени ненулевой[a]

Значение данных не является допустимым литералом ODBC-date-литерал или ODBC-timestamp-литералом
Недоступно

Недоступно

22008

22018
SQL_TYPE_TIME Значение данных — допустимый литерал ODBC-time-литерал

Значение данных является допустимым атрибутом ODBC-timestamp-литералом; часть дробных секунд равна нулю[b]

Значение данных является допустимым значением ODBC-timestamp-литералов; часть дробных секунд ненулевой[b]

Значение данных не является допустимым литералом ODBC-time-литерал или ODBC-timestamp-литералом
Недоступно

Недоступно

22008

22018
SQL_TYPE_TIMESTAMP Значение данных является допустимым значением odBC-timestamp-литералом; часть дробных секунд не усечена

Значение данных — допустимый объект ODBC-timestamp-литерал; часть дробных секунд усечена

Значение данных — допустимый odBC-date-литерал[c]

Значение данных является допустимым литералом ODBC-time-literal[d]

Значение данных не является допустимым литералом ODBC-date-, ODBC-time-литерал или ODBC-timestamp-литералом
Недоступно

22008

Недоступно

Недоступно

22018
Все типы интервалов SQL Значение данных является допустимым значением интервала; усечение не происходит

Значение данных — допустимое значение интервала; значение в одном из полей усечено

Значение данных не является допустимым литералом интервала
Недоступно

22015

22018

[a] Часть времени метки времени усечена.

[b] Часть метки времени игнорируется.

[c] Часть времени метки времени имеет значение нулю.

[d] Для части метки времени задана текущая дата.

[e] Драйвер или источник данных фактически ожидает получения всей строки (даже если символьные данные отправляются в фрагментах вызовами SQLPutData), прежде чем пытаться выполнить преобразование.

При преобразовании символьных данных C в числовые, дата, время или метку времени SQL, начальные и конечные пробелы игнорируются.

При преобразовании символьных данных C в двоичные данные SQL каждые два байта символьных данных преобразуются в один байт (8 бит) двоичных данных. Каждый два байта символьных данных представляют число в шестнадцатеричной форме. Например, "01" преобразуется в двоичный 00000001 и "FF" преобразуется в двоичный 11111111.

Драйвер всегда преобразует пары шестнадцатеричных цифр в отдельные байты и игнорирует байт завершения null. Из-за этого, если длина строки символа нечетна, последний байт строки (за исключением байта завершения null, если таковой имеется), не преобразуется.

Заметка

Разработчикам приложений не рекомендуется привязывать символьные данные C к двоичному типу данных SQL. Это преобразование обычно неэффективно и медленно.