Tipos de dados SQL

Cada DBMS define seus próprios tipos de SQL. Cada driver ODBC expõe apenas os tipos de dados SQL definidos pelo DBMS associado. Informações sobre como um driver mapeia tipos SQL do DBMS para os identificadores de tipo SQL definidos pelo ODBC e como um driver mapeia tipos SQL do DBMS para seus próprios identificadores de tipo SQL específicos do driver é retornado por meio de uma chamada para SQLGetTypeInfo. Um driver também retorna os tipos de dados SQL ao descrever os tipos de dados de colunas e parâmetros por meio de chamadas para SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns e SQLSpecialColumns.

Observação

Os tipos de dados SQL estão contidos nos campos SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE e SQL_DESC_DATETIME_INTERVAL_CODE dos descritores de implementação. As características dos tipos de dados SQL estão contidas nos campos SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH e SQL_DESC_OCTET_LENGTH dos descritores de implementação. Para obter mais informações, consulte Identificadores de tipo de dados e descritores posteriormente neste apêndice.

Um determinado driver e uma fonte de dados não dão suporte necessariamente a todos os tipos de dados SQL definidos neste apêndice. O suporte de um driver para tipos de dados SQL depende do nível do SQL-92 com o qual o driver está em conformidade. Para determinar o nível de gramática SQL-92 compatível com o driver, um aplicativo chama SQLGetInfo com o tipo de informações SQL_SQL_CONFORMANCE. Além disso, um determinado driver e uma fonte de dados podem dar suporte a tipos de dados SQL adicionais específicos do driver. Para determinar quais tipos de dados um driver dá suporte, um aplicativo chama SQLGetTypeInfo. Para informações sobre tipos de dados SQL específicos do driver, confira a documentação do driver. Para obter informações sobre os tipos de dados em uma fonte de dados específica, consulte a documentação dessa fonte de dados.

Importante

As tabelas em todo esse apêndice são apenas diretrizes e mostram nomes, intervalos e limites normalmente usados de tipos de dados SQL. Uma determinada fonte de dados pode dar suporte apenas a alguns dos tipos de dados listados, e as características dos tipos de dados com suporte podem ser diferentes daquelas listadas.

A tabela a seguir lista identificadores de tipo SQL válidos para todos os tipos de dados SQL. A tabela também lista o nome e a descrição do tipo de dados correspondente do SQL-92 (se houver).

Identificador de tipo SQL[1] Dados SQL típicos

type[2]
Descrição do tipo típico
SQL_CHAR CHAR(n) Cadeia de caracteres de comprimento de cadeia de caracteres fixa n.
SQL_VARCHAR VARCHAR(n) Cadeia de caracteres de comprimento variável com um comprimento máximo de cadeia de caracteres n.
SQL_LONGVARCHAR LONG VARCHAR Dados de caractere de comprimento variável. O comprimento máximo depende da fonte de dados. [9]
SQL_WCHAR WCHAR(n) Cadeia de caracteres Unicode de comprimento de cadeia de caracteres fixa n
SQL_WVARCHAR VARWCHAR(n) Cadeia de caracteres de comprimento variável Unicode com um comprimento máximo de cadeia de caracteres n
SQL_WLONGVARCHAR LONGWVARCHAR Dados de caractere Unicode de comprimento variável. O comprimento máximo depende da fonte de dados
SQL_DECIMAL DECIMAL(p,s) Valor numérico com sinal, exato, com uma precisão de pelo menos p e s de escala. (A precisão máxima é definida pelo driver.) (1 <= p<= 15; s< = p). [4]
SQL_NUMERIC NUMERIC(p,s) Valor numérico com sinal, exato, com precisão p e escala s (1 <= p<= 15; s< = p). [4]
SQL_SMALLINT SMALLINT Valor numérico exato com precisão 5 e escala 0 (assinado: -32.768 <= n<= 32.767, sem sinal: 0 <= n<= 65.535)[3].
SQL_INTEGER INTEGER Valor numérico exato com precisão 10 e escala 0 (assinado: -2[31] <= n<= 2[31] - 1, sem sinal: 0 <= n<= 2[32] - 1)[3].
SQL_REAL real Valor numérico com sinal, aproximado e com precisão binária 24 (valor zero ou absoluto 10[-38] a 10[38]).
SQL_FLOAT FLOAT(p) Valor numérico com sinal, aproximado e com uma precisão binária de pelo menos p. (A precisão máxima é definida pelo driver.) [5]
SQL_DOUBLE DOUBLE PRECISION Valor numérico com sinal, aproximado e com precisão binária 53 (valor zero ou absoluto 10[-308] a 10[308]).
SQL_BIT BIT Dados binários de bit único. [8]
SQL_TINYINT TINYINT Valor numérico exato com precisão 3 e escala 0 (assinado: -128 <= n<= 127, sem sinal: 0 <= n<= 255)[3].
SQL_BIGINT bigint Valor numérico exato com precisão 19 (se assinado) ou 20 (se não assinado) e escala 0 (assinado: -2[63] <= n<= 2[63] - 1, sem sinal: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Dados binários de comprimento fixo n. [9]
SQL_VARBINARY VARBINARY(n) Dados binários de comprimento variável de comprimento máximo n. O máximo é definido pelo usuário. [9]
SQL_LONGVARBINARY LONG VARBINARY Dados binários de comprimento variável. O comprimento máximo depende da fonte de dados. [9]
SQL_TYPE_DATE[6] DATE Campos de ano, mês e dia, em conformidade com as regras do calendário gregoriano. (Consulte Restrições do Calendário Gregoriano, posteriormente neste apêndice.)
SQL_TYPE_TIME[6] TIME(p) Campos de hora, minuto e segundo, com valores válidos para horas de 00 a 23, valores válidos para minutos de 00 a 59 e valores válidos para segundos de 00 a 61. Precisão p indica a precisão de segundos.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Ano, mês, dia, hora, minuto e segundo campos, com valores válidos conforme definido para os tipos de dados DATE e TIME.
SQL_TYPE_UTCDATETIME UTCDATETIME Campos ano, mês, dia, hora, minuto, segundo, utchour e utcminute. Os campos utchour e utcminute têm precisão de microssegundos de 1/10.
SQL_TYPE_UTCTIME UTCTIME Campos hour, minute, second, utchour e utcminute. Os campos utchour e utcminute têm precisão de microssegundos de 1/10.
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Número de meses entre duas datas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Número de anos entre duas datas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO MONTH Número de anos e meses entre duas datas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Número de dias entre duas datas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Número de horas entre duas datas/horas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Número de minutos entre duas datas/horas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Número de segundos entre duas datas/horas; p é a precisão à esquerda do intervalo e q é a precisão de segundos do intervalo.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR Número de dias/horas entre duas datas/horas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE Número de dias/horas/minutos entre duas datas/horas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Número de dias/horas/minutos/segundos entre duas datas/horas; p é a precisão à esquerda do intervalo e q é a precisão de segundos do intervalo.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Número de horas/minutos entre duas datas/horas; p é a precisão à esquerda do intervalo.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Número de horas/minutos/segundos entre duas datas/horas; p é a precisão à esquerda do intervalo e q é a precisão de segundos do intervalo.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Número de minutos/segundos entre duas datas/horas; p é a precisão à esquerda do intervalo e q é a precisão de segundos do intervalo.
SQL_GUID GUID GUID de comprimento fixo.

[1] Esse é o valor retornado na coluna DATA_TYPE por uma chamada para SQLGetTypeInfo.

[2] Esse é o valor retornado na coluna NAME e CREATE PARAMS por uma chamada para SQLGetTypeInfo. A coluna NAME retorna a designação , por exemplo, CHAR-, enquanto a coluna CREATE PARAMS retorna uma lista separada por vírgulas de parâmetros de criação, como precisão, escala e comprimento.

[3] Um aplicativo usa SQLGetTypeInfo ou SQLColAttribute para determinar se um tipo de dados específico ou uma coluna específica em um conjunto de resultados não está assinado.

[4] os tipos de dados SQL_DECIMAL e SQL_NUMERIC diferem apenas em sua precisão. A precisão de um DECIMAL(p,s) é uma precisão decimal definida pela implementação que não é menor que p, enquanto a precisão de um NUMERIC(p,s) é exatamente igual ap.

[5] Dependendo da implementação, a precisão de SQL_FLOAT pode ser 24 ou 53: se for 24, o tipo de dados SQL_FLOAT será o mesmo que SQL_REAL; se for 53, o tipo de dados SQL_FLOAT será o mesmo que SQL_DOUBLE.

[6] No ODBC 3.x, os tipos de dados data, hora e carimbo de data/hora do SQL são SQL_TYPE_DATE, SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP, respectivamente; no ODBC 2.x, os tipos de dados são SQL_DATE, SQL_TIME e SQL_TIMESTAMP.

[7] Para obter mais informações sobre os tipos de dados SQL de intervalo, consulte a seção Tipos de dados de intervalo , posteriormente neste apêndice.

[8] O tipo de dados SQL_BIT tem características diferentes do tipo BIT no SQL-92.

[9] Esse tipo de dados não tem nenhum tipo de dados correspondente no SQL-92.

Esta seção fornece o exemplo a seguir.