Types de données SQL

Chaque SGBD définit ses propres types SQL. Chaque pilote ODBC expose uniquement les types de données SQL que le SGBD associé définit. Les informations sur la façon dont un pilote mappe les types SQL SGBD aux identificateurs de type SQL définis par ODBC et sur la façon dont un pilote mappe des types SQL SGBD à ses propres identificateurs de type SQL spécifiques au pilote sont retournées via un appel à SQLGetTypeInfo. Un pilote retourne également les types de données SQL lors de la description des types de données de colonnes et de paramètres par le biais d’appels à SQLColAttribute, SQLColumns, SQLDescribeCol,SQLDescribeParam, SQLProcedureColumns et SQLSpecialColumns.

Notes

Les types de données SQL sont contenus dans les champs SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE et SQL_DESC_DATETIME_INTERVAL_CODE des descripteurs d’implémentation. Les caractéristiques des types de données SQL sont contenues dans les champs SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH et SQL_DESC_OCTET_LENGTH des descripteurs d’implémentation. Pour plus d’informations, consultez Identificateurs et descripteurs de type de données plus loin dans cette annexe.

Un pilote et une source de données donnés ne prennent pas nécessairement en charge tous les types de données SQL définis dans cette annexe. La prise en charge d’un pilote pour les types de données SQL dépend du niveau de SQL-92 que le pilote respecte. Pour déterminer le niveau de grammaire SQL-92 pris en charge par le pilote, une application appelle SQLGetInfo avec le type d’informations SQL_SQL_CONFORMANCE. En outre, un pilote et une source de données donnés peuvent prendre en charge des types de données SQL supplémentaires spécifiques au pilote. Pour déterminer les types de données pris en charge par un pilote, une application appelle SQLGetTypeInfo. Pour plus d’informations sur les types de données SQL spécifiques aux pilotes, consultez la documentation du pilote. Pour plus d’informations sur les types de données dans une source de données spécifique, consultez la documentation relative à cette source de données.

Important

Les tableaux de cette annexe ne sont que des instructions et indiquent les noms, les plages et les limites généralement utilisés des types de données SQL. Une source de données donnée peut prendre en charge uniquement certains des types de données répertoriés, et les caractéristiques des types de données pris en charge peuvent différer de ceux répertoriés.

Le tableau suivant répertorie les identificateurs de type SQL valides pour tous les types de données SQL. Le tableau répertorie également le nom et la description du type de données correspondant de SQL-92 (le cas échéant).

Identificateur de type SQL[1] Données SQL classiques

type[2]
Description de type typique
SQL_CHAR CHAR(n) Chaîne de caractères de longueur de chaîne fixe n.
SQL_VARCHAR VARCHAR(n) Chaîne de caractères de longueur variable avec une longueur de chaîne maximale n.
SQL_LONGVARCHAR LONG VARCHAR Données de caractères de longueur variable. La longueur maximale dépend de la source de données. [9]
SQL_WCHAR WCHAR(n) Chaîne de caractères Unicode de longueur de chaîne fixe n
SQL_WVARCHAR VARWCHAR(n) Chaîne de caractères de longueur variable Unicode avec une longueur de chaîne maximale n
SQL_WLONGVARCHAR LONGWVARCHAR Données de caractères de longueur variable Unicode. La longueur maximale dépend de la source de données
SQL_DECIMAL DECIMAL(p,s) Valeur numérique signée, exacte, avec une précision d’au moins p et d’échelle s. (La précision maximale est définie par le pilote.) (1 <= p<= 15; s< = p). [4]
SQL_NUMERIC NUMERIC(p,s) Valeur signée, exacte, numérique avec une précision p et une échelle s (1 <= p<= 15 ; s< = p). [4]
SQL_SMALLINT SMALLINT Valeur numérique exacte avec précision 5 et échelle 0 (signée : -32 768 <= n< = 32 767, non signée : 0 <= n< = 65 535)[3].
SQL_INTEGER ENTIER Valeur numérique exacte avec précision 10 et échelle 0 (signée : -2[31] <= n<= 2[31] - 1, non signée : 0 <= n<= 2[32] - 1)[3].
SQL_REAL real Valeur numérique signée, approximative, avec une précision binaire 24 (zéro ou valeur absolue 10[-38] à 10[38]).
SQL_FLOAT FLOAT(p) Valeur numérique signée, approximative, avec une précision binaire d’au moins p. (La précision maximale est définie par le pilote.) [5]
SQL_DOUBLE DOUBLE PRECISION Valeur numérique signée, approximative, avec une précision binaire 53 (zéro ou valeur absolue 10[-308] à 10[308]).
SQL_BIT BIT Données binaires mono bits. [8]
SQL_TINYINT TINYINT Valeur numérique exacte avec précision 3 et échelle 0 (signée : -128 <= n<= 127, non signée : 0 <= n<= 255)[3].
SQL_BIGINT bigint Valeur numérique exacte avec précision 19 (si signé) ou 20 (si non signé) et échelle 0 (signé : -2[63] = n<= 2[63] <- 1, non signé : 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Données binaires de longueur fixe n. [9]
SQL_VARBINARY VARBINARY(n) Données binaires de longueur variable de longueur maximale n. Le maximum est défini par l’utilisateur. [9]
SQL_LONGVARBINARY LONG VARBINARY Données binaires de longueur variable. La longueur maximale dépend de la source de données. [9]
SQL_TYPE_DATE[6] DATE Champs année, mois et jour, conformes aux règles du calendrier grégorien. (Voir Contraintes du calendrier grégorien, plus loin dans cette annexe.)
SQL_TYPE_TIME[6] TIME(p) Champs Heure, minute et deuxième, avec des valeurs valides pour les heures de 00 à 23, des valeurs valides pour les minutes de 00 à 59 et des valeurs valides pour les secondes comprises entre 00 et 61. Précision p indique la précision des secondes.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Champs Année, mois, jour, heure, minute et deuxième, avec des valeurs valides telles que définies pour les types de données DATE et HEURE.
SQL_TYPE_UTCDATETIME UTCDATETIME Champs Year, month, day, hour, minute, second, utchour et utcminute. Les champs utchour et utcminute ont une précision de 1/10 microseconde.
SQL_TYPE_UTCTIME UTCTIME Champs hour, minute, second, utchour et utcminute. Les champs utchour et utcminute ont une précision de 1/10 microseconde..
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Nombre de mois entre deux dates; p est la précision de début d’intervalle.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Nombre d’années entre deux dates; p est la précision de début d’intervalle.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO MONTH Nombre d’années et de mois entre deux dates; p est la précision de début d’intervalle.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Nombre de jours entre deux dates ; p est la précision de début d’intervalle.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Nombre d’heures entre deux dates/heures ; p est la précision de début d’intervalle.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Nombre de minutes entre deux dates/heures ; p est la précision de début d’intervalle.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Nombre de secondes entre deux dates/heures ; p est la précision de début d’intervalle et q est la précision de l’intervalle en secondes.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR Nombre de jours/heures entre deux dates/heures ; p est la précision de début d’intervalle.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE Nombre de jours/heures/minutes entre deux dates/heures ; p est la précision de début d’intervalle.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Nombre de jours/heures/minutes/secondes entre deux dates/heures ; p est la précision de début d’intervalle et q est la précision de l’intervalle en secondes.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Nombre d’heures/minutes entre deux dates/heures ; p est la précision de début d’intervalle.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Nombre d’heures/minutes/secondes entre deux dates/heures ; p est la précision de début d’intervalle et q est la précision de l’intervalle en secondes.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Nombre de minutes/secondes entre deux dates/heures ; p est la précision de début d’intervalle et q est la précision de l’intervalle en secondes.
SQL_GUID GUID GUID de longueur fixe.

[1] Il s’agit de la valeur retournée dans la colonne DATA_TYPE par un appel à SQLGetTypeInfo.

[2] Il s’agit de la valeur retournée dans les colonnes NAME et CREATE PARAMS par un appel à SQLGetTypeInfo. La colonne NAME renvoie la désignation( par exemple, CHAR), tandis que la colonne CREATE PARAMS renvoie une liste de paramètres de création séparés par des virgules, tels que la précision, l’échelle et la longueur.

[3] Une application utilise SQLGetTypeInfo ou SQLColAttribute pour déterminer si un type de données particulier ou une colonne particulière dans un jeu de résultats n’est pas signé.

[4] Les types de données SQL_DECIMAL et SQL_NUMERIC diffèrent uniquement par leur précision. La précision d’un DECIMAL(p,s) est une précision décimale définie par l’implémentation qui n’est pas inférieure à p, tandis que la précision d’un numeric(p,s) est exactement égale à p.

[5] Selon l’implémentation, la précision de SQL_FLOAT peut être de 24 ou 53 : si elle est 24, le type de données SQL_FLOAT est identique à SQL_REAL ; s’il est 53, le type de données SQL_FLOAT est identique à SQL_DOUBLE.

[6] Dans ODBC 3.x, les types de données date, heure et horodatage SQL sont SQL_TYPE_DATE, SQL_TYPE_TIME et SQL_TYPE_TIMESTAMP, respectivement ; dans ODBC 2.x, les types de données sont SQL_DATE, SQL_TIME et SQL_TIMESTAMP.

[7] Pour plus d’informations sur les types de données SQL d’intervalle, consultez la section Types de données d’intervalle , plus loin dans cette annexe.

[8] Le type de données SQL_BIT a des caractéristiques différentes du type BIT dans SQL-92.

[9] Ce type de données n’a pas de type de données correspondant dans SQL-92.

Cette section fournit l’exemple suivant.