Partager via


Types de données SQL

Chaque SGBD définit ses propres types SQL. Chaque pilote ODBC expose uniquement les types de données SQL définis par le SGBD associé. Des informations sur la façon dont un pilote mappe les types SQL SGBD aux identificateurs de type SQL définis par ODBC et comment un pilote mappe les types SQL SGBD à ses propres identificateurs de type SQL spécifiques au pilote est retourné par le biais d’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 via des appels à SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns et SQLSpecialColumns.

Remarque

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 Les identificateurs de type de données et les descripteurs 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 auquel le pilote est conforme. 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 au pilote, consultez la documentation du pilote. Pour plus d’informations sur les types de données d’une source de données spécifique, consultez la documentation de cette source de données.

Important

Les tableaux de cette annexe sont uniquement des instructions et affichent les noms, plages et limites généralement utilisés des types de données SQL. Une source de données donnée peut uniquement prendre en charge 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 celles répertoriées.

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

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

type[2]
Description de type classique
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 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 et numérique avec une précision d’au moins p et de mise à l’échelle. (La précision maximale est définie par le pilote.) (1 <= p<= 15 ; s= p<).[ 4]
SQL_NUMERIC NUMERIC(p,s) Valeur numérique signée, exacte et numérique avec une précision p et des échelles (1 <= p<= 15 ; s= p<).[ 4]
SQL_SMALLINT SMALLINT Valeur numérique exacte avec précision 5 et échelle 0 (signé : -32 768 <= n<= 32 767, non signé : 0 <= n<= 65 535)[3].
SQL_INTEGER INTEGER Valeur numérique exacte avec précision 10 et échelle 0 (signé : -2[31] = n<= 2[31] - 1, non signé : 0 <= n<= 2[32] <- 1)[3].
SQL_REAL real Valeur numérique signée, approximative et numérique 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 et numérique 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 et numérique avec une précision binaire 53 (zéro ou valeur absolue 10[-308] à 10[308]).
SQL_BIT BIT Données binaires binaires à bit unique. [8]
SQL_TINYINT TINYINT Valeur numérique exacte avec précision 3 et échelle 0 (signé : -128 <= n<= 127, non signé : 0 <= n<= 255)[3].
SQL_BIGINT BIGINT Valeur numérique exacte avec précision 19 (si signé) ou 20 (si non signé) et mise à l’é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. La valeur maximale est définie 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 seconde, avec des valeurs valides pour les heures de 00 à 23, les valeurs valides pour les minutes de 00 à 59 et les valeurs valides pour les secondes de 00 à 61. Précision p indique la précision des secondes.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Année, mois, jour, heure, minute et seconde champs, avec des valeurs valides 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 microsecondes.
SQL_TYPE_UTCTIME UTCTIME Champs heure, minute, seconde, utchour et utcminute. Les champs utchour et utcminute ont une précision de microseconde de 1/10..
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Nombre de mois entre deux dates ; p est la précision de début de l’intervalle.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Nombre d’années entre deux dates ; p est la précision de début de l’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 de l’intervalle.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Nombre de jours entre deux dates ; p est la précision de début de l’intervalle.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Nombre d’heures entre deux dates/heures ; p est la précision de début de l’intervalle.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Nombre de minutes entre deux dates/heures ; p est la précision de début de l’intervalle.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Nombre de secondes entre deux dates/heures ; p est la précision de début de l’intervalle et q correspond à la précision d’intervalle de 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 de l’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 de l’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 de l’intervalle et q correspond à la précision d’intervalle de secondes.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVALLE HOUR(p) TO MINUTE Nombre d’heures/minutes entre deux dates/heures ; p est la précision de début de l’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 de l’intervalle et q correspond à la précision d’intervalle de 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 de l’intervalle et q correspond à la précision d’intervalle de 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 la colonne NAME et CREATE PARAMS par un appel à SQLGetTypeInfo. La colonne NAME retourne la désignation, par exemple, CHAR, tandis que la colonne CREATE PARAMS retourne une liste séparée par des virgules de paramètres de création 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] SQL_DECIMAL et SQL_NUMERIC types de données diffèrent uniquement dans leur précision. La précision d’une valeur 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’une valeur 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 s’agit de 53, le type de données SQL_FLOAT est identique à SQL_DOUBLE.

[6] Dans ODBC 3.x, les types de données SQL date, heure et timestamp 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 Interval, 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.