Share via


Tipi di dati SQL

Ogni DBMS definisce i propri tipi SQL. Ogni driver ODBC espone solo i tipi di dati SQL definiti dal DBMS associato. Informazioni su come un driver esegue il mapping dei tipi SQL DBMS agli identificatori di tipo SQL definiti da ODBC e sul modo in cui un driver esegue il mapping dei tipi SQL DBMS ai propri identificatori di tipo SQL specifici del driver viene restituito tramite una chiamata a SQLGetTypeInfo. Un driver restituisce anche i tipi di dati SQL quando descrivono i tipi di dati di colonne e parametri tramite chiamate a SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns e SQLSpecialColumns.

Nota

I tipi di dati SQL sono contenuti nei campi SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE e SQL_DESC_DATETIME_INTERVAL_CODE dei descrittori di implementazione. Le caratteristiche dei tipi di dati SQL sono contenute nei campi SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH e SQL_DESC_OCTET_LENGTH dei descrittori di implementazione. Per altre informazioni, vedere Identificatori e descrittori del tipo di dati più avanti in questa appendice.

Un determinato driver e un'origine dati non supportano necessariamente tutti i tipi di dati SQL definiti in questa appendice. Il supporto di un driver per i tipi di dati SQL dipende dal livello di SQL-92 con cui il driver è conforme. Per determinare il livello di grammatica SQL-92 supportato dal driver, un'applicazione chiama SQLGetInfo con il tipo di informazioni SQL_SQL_CONFORMANCE. Inoltre, un determinato driver e un'origine dati possono supportare tipi di dati SQL aggiuntivi specifici del driver. Per determinare i tipi di dati supportati da un driver, un'applicazione chiama SQLGetTypeInfo. Per informazioni sui tipi di dati SQL specifici del driver, vedere la documentazione del driver. Per informazioni sui tipi di dati in un'origine dati specifica, vedere la documentazione per tale origine dati.

Importante

Le tabelle in questa appendice sono solo linee guida e mostrano in genere nomi, intervalli e limiti dei tipi di dati SQL. Una determinata origine dati potrebbe supportare solo alcuni dei tipi di dati elencati e le caratteristiche dei tipi di dati supportati possono essere diverse da quelle elencate.

Nella tabella seguente sono elencati gli identificatori di tipo SQL validi per tutti i tipi di dati SQL. La tabella elenca anche il nome e la descrizione del tipo di dati corrispondente da SQL-92 (se presente).

Identificatore di tipo SQL[1] Dati SQL tipici

type[2]
Descrizione tipica del tipo
SQL_CHAR CHAR(n) Stringa di caratteri con lunghezza di stringa fissa n.
SQL_VARCHAR VARCHAR(n) Stringa di caratteri a lunghezza variabile con lunghezza massima di stringa n.
SQL_LONGVARCHAR LONG VARCHAR Dati di tipo carattere di lunghezza variabile. La lunghezza massima è dipendente dall'origine dati. [9]
SQL_WCHAR WCHAR(n) Stringa di caratteri Unicode con lunghezza di stringa fissa n
SQL_WVARCHAR VARWCHAR(n) Stringa di caratteri a lunghezza variabile Unicode con lunghezza massima di stringa n
SQL_WLONGVARCHAR LONGWVARCHAR Dati di tipo carattere a lunghezza variabile Unicode. La lunghezza massima è dipendente dall'origine dati
SQL_DECIMAL DECIMAL(p,s) Con segno, esatto, valore numerico con precisione di almeno p e scala s. (la precisione massima è definita dal driver).) (1 <= p<= 15; s<= p).[ 4]
SQL_NUMERIC NUMERIC(p,s) Con segno, esatto, valore numerico con precisione p e scala s (1 <= p<= 15; s<= p).[ 4]
SQL_SMALLINT SMALLINT Valore numerico esatto con precisione 5 e scala 0 (con segno: -32.768 <= n<= 32.767, senza segno: 0 <= n<= 65.535)[3].
SQL_INTEGER INTEGER Valore numerico esatto con precisione 10 e scala 0 (con segno: -2[31] <= n<= 2[31] - 1, senza segno: 0 <= n<= 2[32] - 1)[3].
SQL_REAL REAL Con segno, approssimativo, valore numerico con precisione binaria 24 (valore zero o assoluto da 10[-38] a 10[38]).
SQL_FLOAT FLOAT(p) Valore numerico con segno, approssimativo e con precisione binaria di almeno p. La precisione massima è definita dal driver. [5]
SQL_DOUBLE DOUBLE PRECISION Valore numerico con segno, approssimativo e con precisione binaria 53 (valore zero o assoluto da 10[-308] a 10[308]).
SQL_BIT BIT Dati binari a bit singolo. [8]
SQL_TINYINT TINYINT Valore numerico esatto con precisione 3 e scala 0 (con segno: -128 <= n<= 127, senza segno: 0 <= n<= 255)[3].
SQL_BIGINT bigint Valore numerico esatto con precisione 19 (se firmato) o 20 (se non firmato) e scala 0 (con segno: -2[63] <= n<= 2[63] - 1, senza segno: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Dati binari di lunghezza fissa n.[ 9]
SQL_VARBINARY VARBINARY(n) Dati binari a lunghezza variabile di lunghezza massima n. Il valore massimo è impostato dall'utente. [9]
SQL_LONGVARBINARY LONG VARBINARY Dati binari a lunghezza variabile. La lunghezza massima è dipendente dall'origine dati. [9]
SQL_TYPE_DATE[6] DATE Campi anno, mese e giorno, conformi alle regole del calendario gregoriano. (Vedere Vincoli del calendario gregoriano, più avanti in questa appendice.
SQL_TYPE_TIME[6] TIME(p) Campi hour, minute e second, con valori validi per ore da 00 a 23, valori validi per i minuti da 00 a 59 e valori validi per secondi da 00 a 61. Precision p indica la precisione dei secondi.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Campi Year, month, day, hour, minute e second, con valori validi definiti per i tipi di dati DATE e TIME.
SQL_TYPE_UTCDATETIME UTCDATETIME Campi Year, month, day, hour, minute, second, utchour e utcminute. I campi utchour e utcminute hanno precisione di 1/10 microsecondi.
SQL_TYPE_UTCTIME UTCTIME Campi hour, minute, second, utchour e utcminute. I campi utchour e utcminute hanno precisione di 1/10 microsecondi.
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Numero di mesi tra due date; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Numero di anni tra due date; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO MONTH Numero di anni e mesi tra due date; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Numero di giorni tra due date; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Numero di ore tra due date/ore; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Numero di minuti tra due date/ore; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Numero di secondi tra due date/ore; p è la precisione iniziale dell'intervallo e q è la precisione dei secondi di intervallo.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR Numero di giorni/ore tra due date/ore; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE Numero di giorni/ore/minuti tra due date/ore; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Numero di giorni/ore/minuti/secondi tra due date/ore; p è la precisione iniziale dell'intervallo e q è la precisione dei secondi di intervallo.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Numero di ore/minuti tra due date/ore; p è la precisione iniziale dell'intervallo.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Numero di ore/minuti/secondi tra due date/ore; p è la precisione iniziale dell'intervallo e q è la precisione dei secondi di intervallo.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Numero di minuti/secondi tra due date/ore; p è la precisione iniziale dell'intervallo e q è la precisione dei secondi di intervallo.
SQL_GUID GUID GUID a lunghezza fissa.

[1] Questo è il valore restituito nella colonna DATA_TYPE da una chiamata a SQLGetTypeInfo.

[2] Questo è il valore restituito nella colonna NAME e CREATE PARAMS da una chiamata a SQLGetTypeInfo. La colonna NAME restituisce la designazione, ad esempio CHAR, mentre la colonna CREATE PARAMS restituisce un elenco delimitato da virgole di parametri di creazione, ad esempio precisione, scala e lunghezza.

[3] Un'applicazione usa SQLGetTypeInfo o SQLColAttribute per determinare se un determinato tipo di dati o una determinata colonna in un set di risultati non è firmato.

[4] SQL_DECIMAL e SQL_NUMERIC tipi di dati differiscono solo per la precisione. La precisione di un decimale(p,s) è una precisione decimale definita dall'implementazione che non è minore di p, mentre la precisione di un numerico(p,s) è esattamente uguale a p.

[5] A seconda dell'implementazione, la precisione di SQL_FLOAT può essere 24 o 53: se è 24, il tipo di dati SQL_FLOAT è uguale a SQL_REAL; se è 53, il tipo di dati SQL_FLOAT è uguale a SQL_DOUBLE.

[6] In ODBC 3.x, i tipi di dati data, ora e timestamp SQL sono rispettivamente SQL_TYPE_DATE, SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP; in ODBC 2.x, i tipi di dati sono SQL_DATE, SQL_TIME e SQL_TIMESTAMP.

[7] Per altre informazioni sui tipi di dati SQL intervallo, vedere la sezione Tipi di dati interval, più avanti in questa appendice.

[8] Il tipo di dati SQL_BIT presenta caratteristiche diverse rispetto al tipo BIT in SQL-92.

[9] Questo tipo di dati non ha un tipo di dati corrispondente in SQL-92.

In questa sezione viene fornito l'esempio seguente.