Преобразование из 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. Это преобразование обычно неэффективно и медленно.