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.