Tipos de dados SQL
Cada SGBD define seus próprios tipos de SQL. Cada driver ODBC expõe apenas os tipos de dados SQL que o DBMS associado define. As 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 são retornadas 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 e descritores de tipo de dados mais adiante neste apêndice.
Um determinado driver e fonte de dados não dá necessariamente suporte 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 de 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ção SQL_SQL_CONFORMANCE. Além disso, um determinado driver e fonte de dados podem dar suporte a tipos de dados SQL adicionais específicos do driver. Para determinar quais tipos de dados são compatíveis com um driver, 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 ao longo deste 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 a apenas 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 tipo[2] |
Descrição típica do tipo |
---|---|---|
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 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 exato e assinado com uma precisão de pelo menos p e escala s. (A precisão máxima é definida pelo driver.) (1 <= p< = 15; s<= p).[ 4] |
SQL_NUMERIC | NUMÉRICO(p,s) | Valor numérico exato e assinado 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 aproximado assinado com uma precisão binária 24 (valor zero ou absoluto 10 [-38] a 10 [38]). |
SQL_FLOAT | FLUTUAÇÃO(p) | Valor numérico aproximado e assinado 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 aproximado assinado com uma 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 | BINÁRIO(n) | Dados binários de comprimento fixo n.[ 9] |
SQL_VARBINARY | VARBINÁRIO(n) | Dados binários de comprimento variável de comprimento máximo n. O máximo é definido pelo usuário. [9] |
SQL_LONGVARBINARY | VARBINARY LONGO | 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. (Veja Restrições do calendário gregoriano, mais adiante neste apêndice.) |
SQL_TYPE_TIME[6] | TEMPO(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. A precisão p indica a precisão dos segundos. |
SQL_TYPE_TIMESTAMP[6] | CARIMBO DE DATA/HORA(p) | Campos Ano, mês, dia, hora, minuto e segundo, com valores válidos conforme definido para os tipos de dados DATA e HORA. |
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 1/10 microssegundo. |
SQL_TYPE_UTCTIME | Hora UTC | Campos de hora, minuto, segundo, utchour e utcminute. Os campos utchour e utcminute têm precisão de 1/10 microssegundo. |
SQL_INTERVAL_MONTH[7] | INTERVALO MÊS(p) | Número de meses entre duas datas; p é a precisão do intervalo principal. |
SQL_INTERVAL_YEAR[7] | INTERVALO ANO(p) | Número de anos entre duas datas; p é a precisão do intervalo principal. |
SQL_INTERVAL_YEAR_TO_MONTH[7] | INTERVALO ANO (p) PARA MÊS | Número de anos e meses entre duas datas; p é a precisão do intervalo principal. |
SQL_INTERVAL_DAY[7] | DIA DE INTERVALO (p) | Número de dias entre duas datas; p é a precisão do intervalo principal. |
SQL_INTERVAL_HOUR[7] | HORA DE INTERVALO (p) | Número de horas entre duas datas/horários; p é a precisão do intervalo principal. |
SQL_INTERVAL_MINUTE[7] | INTERVALO MINUTO (p) | Número de minutos entre duas datas/horários; p é a precisão do intervalo principal. |
SQL_INTERVAL_SECOND[7] | INTERVALO SEGUNDO(p,q) | Número de segundos entre duas datas/horas; p é a precisão do intervalo principal e q é a precisão do intervalo de segundos. |
SQL_INTERVAL_DAY_TO_HOUR[7] | INTERVALO DIA (p) A HORA | Número de dias/horas entre duas datas/horas; p é a precisão do intervalo principal. |
SQL_INTERVAL_DAY_TO_MINUTE[7] | INTERVALO DIA(p) PARA MINUTO | Número de dias/horas/minutos entre duas datas/horários; p é a precisão do intervalo principal. |
SQL_INTERVAL_DAY_TO_SECOND[7] | INTERVALO DE DIA(p) PARA SEGUNDO(q) | Número de dias/horas/minutos/segundos entre duas datas/horas; p é a precisão do intervalo principal e q é a precisão do intervalo de segundos. |
SQL_INTERVAL_HOUR_TO_MINUTE[7] | INTERVALO HORA(p) PARA MINUTO | Número de horas/minutos entre duas datas/horas; p é a precisão do intervalo principal. |
SQL_INTERVAL_HOUR_TO_SECOND[7] | INTERVALO DE HORAS (p) PARA SEGUNDO (q) | Número de horas/minutos/segundos entre duas datas/horas; p é a precisão do intervalo principal e q é a precisão do intervalo de segundos. |
SQL_INTERVAL_MINUTE_TO_SECOND[7] | INTERVALO DE MINUTO (p) PARA SEGUNDO (q) | Número de minutos/segundos entre duas datas/horas; p é a precisão do intervalo principal e q é a precisão do intervalo de segundos. |
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 determinado tipo de dados ou uma coluna específica em um conjunto de resultados não está assinado.
[4] SQL_DECIMAL e SQL_NUMERIC tipos de dados 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 a p.
[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 é 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 SQL de data, hora e carimbo de data/hora 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 , mais adiante neste apêndice.
[8] O tipo de dados SQL_BIT tem características diferentes do tipo BIT no SQL-92.
[9] Este tipo de dados não tem nenhum tipo de dados correspondente no SQL-92.
Esta seção fornece o exemplo a seguir.