Типы данных SQL

Каждая СУБД определяет собственные типы SQL. Каждый драйвер ODBC предоставляет только те типы данных SQL, которые определяют связанные СУБД. Сведения о том, как драйвер сопоставляет типы СУБД SQL с идентификаторами типов SQL, определяемыми ODBC, и как драйвер сопоставляет типы СУБД SQL с собственными идентификаторами типов SQL для конкретного драйвера, возвращается через вызов SQLGetTypeInfo. Драйвер также возвращает типы данных SQL при описании типов данных столбцов и параметров с помощью вызовов SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns и SQLSpecialColumns.

Заметка

Типы данных SQL содержатся в полях дескриптора реализации SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE и SQL_DESC_DATETIME_INTERVAL_CODE. Характеристики типов данных SQL содержатся в полях SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH и SQL_DESC_OCTET_LENGTH дескрипторов реализации. Дополнительные сведения см . в разделе "Идентификаторы типов данных" и "Дескрипторы " далее в этом приложении.

Указанный драйвер и источник данных не обязательно поддерживают все типы данных SQL, определенные в этом приложении. Поддержка драйвера для типов данных SQL зависит от уровня SQL-92, с которым соответствует драйвер. Чтобы определить уровень грамматики SQL-92, поддерживаемой драйвером, приложение вызывает SQLGetInfo с типом сведений SQL_SQL_CONFORMANCE. Кроме того, указанный драйвер и источник данных могут поддерживать дополнительные типы данных SQL для конкретного драйвера. Чтобы определить, какие типы данных поддерживает драйвер, приложение вызывает SQLGetTypeInfo. Сведения о типах данных SQL для конкретного драйвера см. в документации по драйверу. Сведения о типах данных в определенном источнике данных см. в документации по источнику данных.

Внимание

Таблицы в этом приложении являются только рекомендациями и отображают обычно используемые имена, диапазоны и ограничения типов данных SQL. Указанный источник данных может поддерживать только некоторые из перечисленных типов данных, а характеристики поддерживаемых типов данных могут отличаться от перечисленных.

В следующей таблице перечислены допустимые идентификаторы типов SQL для всех типов данных SQL. В таблице также перечислены имя и описание соответствующего типа данных из SQL-92 (если он существует).

Идентификатор типа SQL[1] Типичные данные SQL

type[2]
Типичное описание типа
SQL_CHAR CHAR(n) Символьная строка фиксированной длины строки n.
SQL_VARCHAR VARCHAR(n) Строка символа переменной длины с максимальной длиной строки n.
SQL_LONGVARCHAR LONG VARCHAR Данные символов переменной длины. Максимальная длина зависит от источника данных. [9]
SQL_WCHAR WCHAR(n) Символьная строка Юникода фиксированной длины строки n
SQL_WVARCHAR VARWCHAR(n) Строка символа переменной длины Юникода с максимальной длиной строки n
SQL_WLONGVARCHAR LONGWVARCHAR Символьные данные переменной длины Юникода. Максимальная длина зависит от источника данных
SQL_DECIMAL DECIMAL(p,s) Подписанное, точное числовое значение с точностью по крайней мере p и scale s. (Максимальная точность определяется драйвером.) (1 <= p<= 15; s<= p).[ 4]
SQL_NUMERIC NUMERIC(p,s) Подписанный, точный, числовое значение с точностью p и масштабируемым s (1 <= p<= 15; s<= p).[ 4]
SQL_SMALLINT SMALLINT Точное числовое значение с точностью 5 и масштабом 0 (подписанный: -32 768 <= n<= 32 767, без знака: 0 <= n<= 65 535)[3].
SQL_INTEGER INTEGER Точное числовое значение с точностью 10 и масштабом 0 (подписанный: -2[31] <= n<= 2[31] - 1, без знака: 0 <= n<= 2[32] - 1)[3].
SQL_REAL real Подписанный, приблизительное числовое значение с двоичной точностью 24 (нулевое или абсолютное значение 10[-38] до 10[38]).
SQL_FLOAT FLOAT(p) Подписанный, приблизительный, числовое значение с двоичной точностью по крайней мере p. (Максимальная точность определяется драйвером.) [5]
SQL_DOUBLE DOUBLE PRECISION Подписанный, приблизительное числовое значение с двоичной точностью 53 (нулевое или абсолютное значение 10[-308] до 10[308]).
SQL_BIT BIT Однобитовые двоичные данные. [8]
SQL_TINYINT TINYINT Точное числовое значение с точностью 3 и масштабом 0 (подписанный: -128 <= n<= 127, без знака: 0 <= n<= 255)[3].
SQL_BIGINT BIGINT Точное числовое значение с точностью 19 (если подпись) или 20 (если не указано) и масштаб 0 (подписанный: -2[63] <= n<= 2[63] - 1, без знака: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Двоичные данные фиксированной длины n.[ 9]
SQL_VARBINARY VARBINARY(n) Двоичные данные переменной длины n. Максимальное значение задается пользователем. [9]
SQL_LONGVARBINARY LONG VARBINARY Двоичные данные переменной длины. Максимальная длина зависит от источника данных. [9]
SQL_TYPE_DATE[6] DATE Поля года, месяца и дня, соответствующие правилам григорианского календаря. (См. раздел Ограничения григорианского календаря далее в этом приложении.)
SQL_TYPE_TIME[6] TIME(p) Часы, минуты и второй поля с допустимыми значениями в часах от 00 до 23, допустимые значения в минутах от 00 до 59 и допустимые значения в секундах от 00 до 61. Точность p указывает точность секунд.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Год, месяц, день, час, минута и второе поля с допустимыми значениями, определенными для типов данных DATE и TIME.
SQL_TYPE_UTCDATETIME UTCDATETIME Год, месяц, день, час, минута, вторая, utchour и поля utcminute. Поля utchour и utcminute имеют точность 1/10 микросекунд.
SQL_TYPE_UTCTIME UTCTIME Час, минута, секунда, utchour и поля utcminute. Поля utchour и utcminute имеют точность 1/10 микросекунд..
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Количество месяцев между двумя датами; p — это начальная точность интервала.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Количество лет между двумя датами; p — это начальная точность интервала.
SQL_INTERVAL_YEAR_TO_MONTH[7] ИНТЕРВАЛ ГОДА(p) ДО МЕСЯЦА Количество лет и месяцев между двумя датами; p — это начальная точность интервала.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Количество дней между двумя датами; p — это начальная точность интервала.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Количество часов между двумя датами и временем; p — это начальная точность интервала.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Количество минут между двумя датами и временем; p — это начальная точность интервала.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Количество секунд между двумя датами и временем; p — это начальная точность интервала, а q — это точность интервала в секундах.
SQL_INTERVAL_DAY_TO_HOUR[7] ИНТЕРВАЛ ДНЯ(p) ДО ЧАСА Количество дней и часов между двумя датами и временем; p — это начальная точность интервала.
SQL_INTERVAL_DAY_TO_MINUTE[7] ИНТЕРВАЛ ДНЯ(p) ДО МИНУТЫ Количество дней/часов/минут между двумя датами и временем; p — это начальная точность интервала.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Количество дней/часов/минут/секунд между двумя датами и временем; p — это начальная точность интервала, а q — это точность интервала в секундах.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Количество часов и минут между двумя датами и временем; p — это начальная точность интервала.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Количество часов/минут/секунд между двумя датами и временем; p — это начальная точность интервала, а q — это точность интервала в секундах.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Количество минут/секунд между двумя датами и временем; p — это начальная точность интервала, а q — это точность интервала в секундах.
SQL_GUID GUID Guid фиксированной длины.

[1] Это значение, возвращаемое в столбце DATA_TYPE вызовом SQLGetTypeInfo.

[2] Это значение, возвращаемое в столбце NAME и CREATE PARAMS путем вызова SQLGetTypeInfo. Столбец NAME возвращает обозначение, например CHAR, тогда как столбец CREATE PARAMS возвращает разделенный запятыми список параметров создания, таких как точность, масштабирование и длина.

[3] Приложение использует SQLGetTypeInfo или SQLColAttribute , чтобы определить, является ли определенный тип данных или определенный столбец в результирующем наборе неназначен.

[4] SQL_DECIMAL и SQL_NUMERIC типы данных отличаются только в их точности. Точность ДЕСЯТИЧНЫХ(p,s) — это определяемая реализацией десятичная точность, которая не меньше p, в то время как точность числовых чисел (p,) точно равна p.

[5] В зависимости от реализации точность SQL_FLOAT может быть либо 24, либо 53: если она равна 24, тип данных SQL_FLOAT совпадает с SQL_REAL; Если значение равно 53, тип данных SQL_FLOAT совпадает с SQL_DOUBLE.

[6] В ODBC 3.x типы данных даты, времени и метки времени SQL SQL_TYPE_DATE, SQL_TYPE_TIME и SQL_TYPE_TIMESTAMP соответственно; в ODBC 2.x типы данных SQL_DATE, SQL_TIME и SQL_TIMESTAMP.

[7] Дополнительные сведения о типах данных SQL интервала см . в разделе "Типы данных интервала" далее в этом приложении.

[8] Тип данных SQL_BIT отличается от типа BIT в SQL-92.

[9] Этот тип данных не имеет соответствующего типа данных в SQL-92.

В этом разделе приведен следующий пример.