Types de données numériques en SQL. Langage SQL Types de données Types de données SQL

1.1. Types de caractères

1) Chaînes de longueur constante
CARBONISER()– une ligne de texte dans un format défini par le développeur. Le nombre naturel définit les chaînes.
En pratique, le nombre maximum de caractères varie de 256 dans MS SQL Server à 32 767 dans InterBase.
CHAR est traité comme CHAR(1)

2) Chaînes de longueur variable
VARCHAR|CHAR VARIANT [()]– une chaîne de texte de longueur variable dans un format défini par le développeur. L'entier naturel spécifie la longueur maximale de la ligne, mais le tableau ne fournit un espace que pour la longueur réelle de la ligne.

3) Caractéristiques des types de caractères d'un certain nombre de SGBD
Dans un certain nombre de SGBD, par exemple MS SQL Server, si CHAR autorise la valeur NULL, il est alors traité comme VARCHAR.
Dans Oracle, pour les champs VARCHAR2, vous pouvez réserver de l'espace dans chaque bloc pour les futures mises à jour des champs en définissant l'option PCTFREE.

1.2. Types numériques

1) Types de données entiers
INT– un nombre sans point décimal. La taille dépend de l'implémentation spécifique. Il s'agit souvent de 4 octets.
PETIT INT– Identique à INT, mais généralement de plus petite taille. Souvent 2 octets.
GRAND– Identique à INT, mais généralement de plus grande taille. Il s'agit de 4 octets ou plus.

2) Nombres réels à virgule fixe
DÉC|)]– nombre décimal à virgule fixe.
Le numéro a :
— nombre total de décimales significatives,
— le nombre maximum de chiffres à droite de la virgule décimale.

3) Nombres réels à virgule flottante
FLOTTER– un nombre à virgule flottante représenté sous forme exponentielle en base 10. Spécifie la précision maximale.
RÉEL– est identique à FLOAT, mais la précision dépend de l’implémentation.
DOUBÉ– est identique à REAL, mais la précision peut être plus grande dans une implémentation particulière.

1.3. Types de dates et d'heures

DATE– date au format aaaa-mm-jj (ISO), mm/jj/aaaa (ANSI).
TEMPS– l’heure au format hh.mm.ss (ISO), hh:mm am/pm (ANSI).
INTERVALLE– date et heure au format aaaa-mm-jj-hh.mm.ss.nnnnn (ISO). (souvent TIMESTAMP).

Note:
Les types de date et d’heure peuvent être spécifiés sous forme de chaînes littérales.
Date : 'aaaa-mm-jj', heure : 'hh.mm.ss',
Intervalle : « aaaa-mm-jj-hh.mm.ss.n…n ».

1.4. Type booléen

BOOLÉEN– valeur logique (VRAI, FAUX, INCONNU).
Pour comprendre correctement la table de vérité en logique à trois valeurs (3VL), nous pouvons classiquement supposer que FAUX vaut 0, VRAI -1 et INCONNU vaut 0,5.
Alors:
— L'opérateur AND renvoie le plus petit.
— L'opérateur OR est la plus grande des valeurs d'origine.
- PAS INCONNU = INCONNU.

2. Collectes

Les collections violent en fait la première forme normale (1NF).

2.1. Tableau

[()] TABLEAU– un ensemble de valeurs du même type.

Note:
Les tableaux ont été introduits dans SQL:99.
Exemple:
Ainsi, la définition WeekDays Varchar(10) ARRAY vous permet de stocker les noms des sept jours de la semaine dans un seul champ.
Un certain nombre de SGBD autorisent même les tableaux multidimensionnels. Ainsi, dans InterBase, jusqu'à 16 modifications sont possibles, Clarion – 4.

2.2. Multiensemble

[()] MULTIJEU– un ensemble illimité de valeurs du même type, permettant les doublons.
Les valeurs sont créées par le constructeur - fonctions spéciales.

Note:
Les multisets ont été introduits dans SQL:2003.

2.3. Type de chaîne anonyme

RANGÉE ([()] , ...)– un ensemble de différents types de valeurs, y compris des valeurs imbriquées.
Les options peuvent spécifier l'ordre de tri des champs de type chaîne et un certain nombre d'autres paramètres.

Exemple:
Ainsi, en définissant Address ROW(State Char(6), City Varchar(30), Street Varchar(50)) vous permet de stocker une adresse détaillée dans un seul champ.

3. Types de métiers

CLOB (caractère grand objet)– se comportent un peu comme des chaînes de caractères, mais ne peuvent pas être utilisées :
— Dans les restrictions Clé primaire, Unique, Clé étrangère.
— Dans les comparaisons autres que les égalités ou inégalités pures, dans les sections Trier par et Regrouper par.
BLOB (grand objet binaire)– un flux d'octets dans un format dans lequel l'utilisateur peut les écrire dans une colonne de base de données.

3.1. Problèmes d'utilisation de LOB

1) Problèmes de stockage
Le stockage des LOB directement dans des tables avec d'autres données interrompt la capacité de l'optimiseur à s'appuyer sur des pages de données dont la taille correspond à celles du disque.
Par conséquent, les LOB sont stockés dans des zones distinctes (segments) de la mémoire disque.

2) Problèmes de mise à jour
La taille des objets LOB pouvant atteindre des dizaines et des centaines de mégaoctets, il est impossible de les stocker entièrement dans des tampons. Par conséquent, les données LOB sont traitées par parties, par exemple par groupes de pages. Les instructions INSERT et UPDATE utilisent des techniques spéciales pour un traitement fragmentaire qui vous permettent d'appeler la même fonction API plusieurs fois sur le même champ. Il en va de même lors de la lecture de données à l'aide des instructions SELECT et FETCH.

3) Problèmes d'exécution des transactions
Pour prendre en charge les transactions, la plupart des SGBD maintiennent un journal des transactions, qui enregistre des copies des données avant et après les modifications.
Cependant, en raison de leur grande taille, les LOB ne sont pas enregistrés.

4) Problèmes de transfert de réseau
Souvent, le client et le serveur s'exécutent sur des ordinateurs différents, et l'envoi d'un LOB sur le réseau peut perturber le travail de toutes les personnes utilisant le réseau à ce moment-là.

4. Différents types

4.1. Localisateur

Une valeur binaire unique (quatre bits) (en POO - un descripteur) stockée dans la base de données.
Décrit dans le programme principal et valable jusqu'à la fin de la transaction.
Conçu pour manipuler les valeurs LOB (ou tableaux) côté client. Au lieu d'un LOB, un lien vers celui-ci est envoyé au client.
Vous pouvez déclarer : LOC : Entier AS LOCATOR.

4.2. XML

Les valeurs sont essentiellement des documents XML.
Ce type définit un certain nombre d'opérations permettant d'accéder à des éléments de valeur de type XML, à des transformations de données similaires, etc.

4.3. Liaison de données

Les liaisons de données font partie de SQL/MED 9075-9:2003.
Datalink est un type spécial de SQL conçu pour stocker des URL dans une base de données, ainsi qu'un certain nombre de fonctions pouvant être utilisées dans les requêtes SQL.
Les fonctionnalités et fonctions prises en charge sont disponibles sur le site Web :
Wiki.postgresql.org/wiki/DATALINK

Utilisé dans DB2, Oracle - pour stocker des données dans un fichier externe BFile.

Tout d’abord, regardons ce que sont les « types de données ».
Les types de données déterminent quelles valeurs peuvent être stockées dans une colonne et combien de mémoire elles occuperont. Lorsque vous créez une table, vous devez spécifier un type de données spécifique pour toutes ses colonnes.
Les principaux types utilisés en SQL peuvent être divisés en plusieurs catégories :

  • Types entiers ;
  • Types fractionnaires ;
  • Types de caractères ;
  • Types d'argent ;
  • Types temporels (date/heure) ;

Types de données entiers

Types de données fractionnaires

Type de données caractère

Type de donnéesDescription
CHAR(taille)Utilisé pour stocker des chaînes. Le paramètre entre parenthèses permet de fixer la longueur de la chaîne stockée. La taille maximale en octets pouvant être spécifiée pour une chaîne est de 255.
VARCHAR (taille)Semblable au type précédent, il vous permet de stocker des chaînes jusqu’à 255 caractères. Cependant, la différence avec CHAR est que la quantité de mémoire requise est allouée pour stocker une valeur de ce type. Autrement dit, une chaîne composée de 5 caractères nécessitera 6 octets de mémoire. Dans le premier cas, la mémoire pour la valeur sera allouée en fonction du paramètre spécifié.
NCHAR(taille)Données de chaîne de longueur constante en Unicode. n spécifie la longueur de la chaîne et doit être une valeur comprise entre 1 et 4 000. La taille de stockage est le double de la valeur de size en octets. Il est recommandé d'utiliser nchar si les tailles des éléments de données dans les colonnes sont censées être similaires.
NVARCHAR
(taille|max)
Données de chaîne de longueur variable en Unicode. Size spécifie la longueur de la chaîne et peut avoir une valeur comprise entre 1 et 4 000. La valeur maximale indique que la taille de stockage maximale est de 2 ^ 31-1 caractères (2 Go). Il est recommandé d'utiliser nvarchar si les tailles des éléments de données dans les colonnes devraient être différentes.
TEXTEDonnées non Unicode de longueur variable dans la page de codes du serveur et avec une longueur de ligne maximale de 2 ^ 31-1 (2 147 483 647).
NTEXTEDonnées codées Unicode de longueur variable avec une longueur de ligne maximale de 2 ^ 30 - 1 (1 073 741 823) octets.

Type de données monétaire

Types d'heure (date/heure)

Type de donnéesDescription
DATEL'objectif principal est de stocker la date au format ANNÉE-MOIS-JOUR (« AAAA-MM-JJ » ou « uuuu-mm-jj »).
TEMPSVous permet de saisir des valeurs temporaires dans une cellule du tableau. Toutes les valeurs sont spécifiées au format « hh:mm:ss ».
DATEHEURECombine les fonctions des deux types précédents. Le format de stockage se présente comme suit : « uuuu-mm-dd hh:mm:ss ».
HORODATAGEStocke la date et l'heure, calculées en fonction du nombre de secondes écoulées depuis minuit le 1er janvier 1970, jusqu'à la valeur spécifiée.

Exemples d'utilisation de types de données

Examinons un exemple d'utilisation des types de données dans SQL.

Un exemple d'utilisation de types de données

MySQL

CREATE TABLE Checks (id INT NOT NULL, Name VARCHAR (50) NOT NULL, DataToDay DATE NOT NULL, Cost FLOAT NOT NULL);

identifiant est un compteur (il stocke le numéro de chèque individuel), il appartient donc au type de données entier, nous le faisons donc INT ou ENTIER. PAS NUL indique que la variable ne peut pas être vide.
DANS Nom Nous stockerons le nom du produit. Puisque la colonne stockera les caractères que nous utilisons VARCHAR. Après avoir spécifié le type, nous allouons de la mémoire pour le nom (dans notre cas, c'est (50) ).
Les colonnes du tableau suivantes sont créées de la même manière.

Dans le monde moderne, il existe un grand nombre d'outils et de technologies conçus pour stocker des informations. L'une des méthodes les plus courantes est celle des bases de données, avec lesquelles divers systèmes de gestion sont utilisés. Cette méthode de stockage suppose que toutes les données sont clairement structurées et saisies dans des tableaux spéciaux. Ils sont à leur tour constitués de colonnes d’attributs d’un certain type de données.

Type de données - qu'est-ce que c'est ?

Il existe aujourd’hui plusieurs définitions qui expliquent le concept du terme « type de données ». Cependant, chacun d’eux a une signification générale. On peut donc le définir classiquement comme un groupe de données caractérisé par ses valeurs (symbolique, numérique, etc.), ainsi que par les opérations appliquées aux valeurs en question.

Le champ d'application des types de données est multiforme. Ils sont utilisés non seulement pour stocker des informations, mais également pour programmer afin de résoudre divers problèmes. Lors de la conception de programmes, il est courant de développer et d'utiliser vos propres types de données avec un ensemble d'opérations spécifique. Cependant, les données personnalisées sont toujours basées sur des types de données de base. Le standard SQL repose également sur l’utilisation des types de base les plus courants, mais avec un certain nombre d’ajouts spécifiques.

Classification des types de données

Le regroupement des données par type est apparu il y a longtemps et était dû à la nécessité d'un traitement plus pratique. Actuellement, la base des types de données existants est constituée de deux : caractères et numériques.

Sur cette base, une classification moderne a été développée, comprenant des pointeurs, des types de données logiques, entiers, à virgule flottante et chaîne. SQL - la classification couvre entièrement tout ce qui précède. Cependant, pour certains SGBD modernes, il existe des modules complémentaires supplémentaires. Ceux-ci incluent Oracle et MySQL.

Types de données de base

Ceux utilisés pour créer des attributs de table répondant aux standards du langage sont répartis en 4 classes :

  • valeurs de chaîne ;
  • fractions;
  • valeurs entières ;
  • valeurs de date et d’heure.

Type de données chaîne

Le premier groupe de valeurs vous permet de stocker toutes les données représentées sous forme de caractères.

Il peut s'agir de caractères spéciaux, de chiffres et de lettres, qui seront traités ensemble comme des chaînes dans n'importe quel type de données, la liste du tableau présentée ci-dessous forme le premier groupe.

Utilisé pour stocker des chaînes. Le paramètre entre parenthèses permet de fixer la longueur de la chaîne stockée. La taille maximale en octets pouvant être spécifiée pour une chaîne est de 255.

Semblable au type précédent, il vous permet de stocker des chaînes jusqu’à 255 caractères. Cependant, la différence avec CHAR est que la quantité de mémoire requise est allouée pour stocker une valeur de ce type. Autrement dit, une chaîne composée de 5 caractères nécessitera 6 octets de mémoire. Dans le premier cas, la mémoire pour la valeur sera allouée en fonction du paramètre spécifié.

Utilisé pour stocker des données de chaîne jusqu'à 255 caractères.

Utilisé pour stocker des informations textuelles dont la taille ne dépasse pas 65 535 lettres.

Le type de données considéré est similaire au type TEXTE et permet de stocker des informations textuelles dans la base de données, dont le volume peut atteindre 65 535 caractères. Mais en pratique, il est utilisé pour stocker des données sonores, des dessins, de la documentation électronique, etc.

Il a été développé sur la base du type TEXTE, mais permet de stocker plus de données grâce à sa taille accrue jusqu'à 16 777 215 lettres ou symboles.

Utilisé pour enregistrer dans la base de données des documents électroniques dont la taille ne dépasse pas 16 777 215 caractères.

Fonctionnellement similaire aux types précédents, mais avec une capacité de mémoire accrue jusqu'à 4 gigaoctets.

Vous permet de placer de grandes quantités de données dans la base de données (4 294 967 295 caractères).

ENUM (a, b, c, etc.)

Un type de données spécial utilisé pour spécifier une liste de valeurs possibles. Vous permet de spécifier 65 535 valeurs. Les chaînes du type en question peuvent prendre une seule valeur parmi celles spécifiées dans l'ensemble. Dans le cas où des valeurs ajoutées ne sont pas présentes dans la liste donnée, des valeurs vides seront écrites dans le tableau.

Spécifie un ensemble de valeurs valides. Contrairement au type précédent, il est utilisé pour contenir 64 paramètres qui peuvent être initialisés par un ou plusieurs éléments à partir des arguments donnés.

Tableau des types de données fractionnaires

Les types de données SQL fractionnaires sont utilisés pour stocker des nombres à virgule flottante. En pratique, en règle générale, divers indicateurs financiers sont définis. En fonction de la précision recherchée, l'une des trois présentées est utilisée :

Par exemple, dans les calculs bancaires, la précision de la partie fractionnaire atteint 8 ou 10 chiffres. Les deux premiers types ne peuvent pas être utilisés dans ce domaine.

Le stockage des indicateurs financiers sous forme de chaînes simplifie grandement la solution de nombreux problèmes. Cependant, lorsqu'il s'agit de problèmes financiers ou d'exécution de diverses opérations SQL, la conversion des types de données revêt une grande importance. Les développeurs doivent veiller à prendre en compte le type de stockage et les méthodes de traitement pour garantir que les données restent toujours inchangées.

Type de données entier

Les nombres entiers sont un groupe distinct de nombres qui forment l'une des classes principales. Les types de données SQL entiers sont basés sur l'utilisation d'un type de base avec une certaine extension de ses propriétés.

En choisissant le bon type de données, vous pouvez économiser une mémoire importante et réduire le temps passé par le serveur à exécuter les requêtes SQL nécessaires. Les types de données, ou plutôt leur étendue, déterminent la quantité d'espace de stockage requise.

Par conséquent, il est important que les développeurs se souviennent que l’utilisation de plages d’attributs étendues entraîne une augmentation des coûts de mémoire. Il est nécessaire d'analyser clairement les problèmes à résoudre et d'identifier les cas où la plage approximative est connue et les conditions d'utilisation des nombres signés sont définies. Si la plage d'arguments utilisée est petite et que tous les nombres sont positifs, il serait alors plus correct d'utiliser le type non signé formé par l'attribut UNSIGNED.

Types de données de date et d'heure

Lors de l’apprentissage des bases de SQL, les types de données date et heure sont particulièrement intéressants.

L'utilisation des types suivants offre des avantages supplémentaires lors du développement de systèmes qui dépendent du timing.

L'objectif principal est de stocker la date au format ANNÉE-MOIS-JOUR (« AAAA-MM-JJ » ou « uuuu-mm-jj »). Généralement, les valeurs sont séparées par « - », mais n'importe quel caractère, à l'exception des chiffres, peut être utilisé comme séparateur.

Vous permet de saisir des valeurs temporaires dans une cellule du tableau. Toutes les valeurs sont spécifiées au format « hh:mm:ss »

Combine les fonctions des deux types précédents. Le format de stockage se présente comme suit : « uuuu-mm-dd hh:mm:ss ».

Stocke la date et l'heure, calculées en fonction du nombre de secondes écoulées depuis minuit le 1er janvier 1970, jusqu'à la valeur spécifiée.

Utilisé pour stocker les valeurs annuelles au format à deux ou quatre chiffres.

Que devez-vous savoir d’autre ?

Tous ces types de données sont systématisés en détail par Microsoft. Elle a développé plus en détail les types de données SQL.

Par exemple, la société décrit en détail la quantité de mémoire en octets allouée lors de l'utilisation de chaque type. Après avoir étudié les informations disponibles, il est plus facile pour les développeurs de concevoir la structure des tables et l'ensemble de la base de données en fonction des capacités matérielles du serveur.

Pointeur spécial - NULL

Parfois, lors du remplissage d'une base de données, une situation survient lorsque, lors de l'ajout d'un enregistrement à une table, il n'est pas nécessaire de saisir des informations dans toutes les colonnes. Pour cela, un pointeur de valeur vide spécial est utilisé - NUL, qui utilise le langage SQL comme aide. Lorsque les tables sont créées, les types de données des colonnes qui ne doivent pas être remplies sont spécifiés avec une instruction qui permet l'inclusion de valeurs nulles. Dans un autre cas, l'opérateur NUL avec accessoire supplémentaire PAS peut être utilisé pour indiquer que toutes les valeurs doivent être renseignées.

Aiguille NUL n'a pas de type, mais pointe simplement vers une valeur vide dans les tables de la base de données. Par conséquent, il peut être combiné avec n’importe lequel des types ci-dessus.

Toutes les valeurs d'une colonne doivent être du même type de données. (La seule exception à cette règle concerne les valeurs du type de données SQL_VARIANT.) Les types de données utilisés dans Transact-SQL peuvent être divisés dans les catégories suivantes :

    types numériques ;

    types de caractères ;

    types temporaires (dates et/ou heures) ;

    d'autres types de données.

Types de données numériques

Comme on peut s'y attendre d'après leur nom, les types de données numériques sont utilisés pour représenter des nombres. Ces types et leurs brèves descriptions sont donnés dans le tableau ci-dessous :

Types de données numériques T-SQL
Type de données Description
ENTIER

Représente des valeurs entières de 4 octets comprises entre -2 32 et 2 32 - 1. INT est une forme abrégée d'INTEGER.

PETIT INT

Représente des valeurs entières sur 2 octets comprises entre -32 768 et 32 767

PETIT INT

Représente des valeurs entières de 1 octet comprises entre 0 et 255

GRAND

Représente des valeurs entières de 8 octets comprises entre -2 63 et 2 63 - 1

DÉCIMAL(p,[s])

Représente des valeurs à virgule fixe. L'argument p (précision) spécifie le nombre total de chiffres et l'argument s (échelle) spécifie le nombre de chiffres à droite de la virgule décimale. Selon la valeur de l'argument p, les valeurs décimales sont stockées sur 5 à 17 octets. DEC est une forme abrégée de DECIMAL.

NUMÉRIQUE(p,[s])

Synonyme de DÉCIMAL.

RÉEL

Utilisé pour représenter des valeurs à virgule flottante. La plage de valeurs positives s'étend d'environ 2,23E -308 à -1,18E -38. Une valeur nulle peut également être représentée.

FLOTTEUR[(p)]

Comme le type REAL, représente des valeurs à virgule flottante [(p)]. L'argument p détermine la précision. À la valeur p< 25 представляемые значения имеют одинарную точность (требуют 4 байта для хранения), а при значении p >= 25 - double précision (nécessite 8 octets pour le stockage).

ARGENT

Utilisé pour représenter des valeurs monétaires. Les valeurs MONEY correspondent à des valeurs DECIMAL sur 8 octets, arrondies à quatre décimales

PETIT ARGENT

Représente les mêmes valeurs que le type MONEY, mais d'une longueur de 4 octets

Types de données de caractères

Il existe deux types généraux de types de données de caractères. Les chaînes peuvent être représentées sous forme de caractères codés sur un octet ou de caractères Unicode. (Unicode utilise plusieurs octets pour représenter un seul caractère.) De plus, les chaînes peuvent être de différentes longueurs. Le tableau ci-dessous répertorie les catégories de types de données caractère avec leurs brèves descriptions.

Types de données de caractères T-SQL
Type de données Description
CHAR[(n)]

Utilisé pour représenter des chaînes de longueur fixe composées de n caractères à un octet. La valeur maximale de n est 8 000. CHARACTER(n) est une forme équivalente alternative de CHAR(n). Si n n’est pas explicitement spécifié, alors sa valeur est supposée être 1.

VARCHAR[(n)]

Utilisé pour représenter une chaîne de caractères à un octet de longueur variable (0< n < 8 000). В отличие от типа данных CHAR, количество байтов для хранения значений типа данных VARCHAR равно их действительной длине. Этот тип данных имеет два синонима: CHAR VARYING и CHARACTER VARYING.

NCHAR[(n)]

Utilisé pour stocker des chaînes de longueur fixe composées de caractères Unicode. La principale différence entre les types de données CHAR et NCHAR est qu'une chaîne NCHAR nécessite 2 octets pour stocker chaque caractère, tandis qu'une chaîne CHAR nécessite 1 octet. Par conséquent, une chaîne de type de données NCHAR peut contenir au maximum 4 000 caractères. Le type NCHAR peut être utilisé pour stocker, par exemple, des caractères de l'alphabet russe, car les codages sur un seul octet ne le permettent pas.

NVARCHAR[(n)]

Utilisé pour stocker des chaînes de longueur variable de caractères Unicode. Chaque caractère d'une chaîne de type de données NVARCHAR nécessite 2 octets pour être stocké. Une chaîne de type de données NVARCHAR peut donc contenir au maximum 4 000 caractères.

Le type de données VARCHAR est identique au type de données CHAR, à une différence près : si le contenu d'une chaîne CHAR(n) est plus court que n caractères, le reste de la chaîne est complété par des espaces. Et le nombre d'octets occupés par une chaîne VARCHAR est toujours égal au nombre de caractères qu'elle contient.

Types de données temporelles

Transact-SQL prend en charge les types de données temporaires suivants :

Types de données DATEHEURE Et PETITDATEHEURE sont utilisés pour stocker la date et l'heure sous forme de valeurs entières de 4 et 2 octets de longueur, respectivement. Les valeurs de type DATETIME et SMALLDATETIME sont stockées en interne sous la forme de deux valeurs numériques distinctes. Le composant date des valeurs de type DATETIME est stocké dans la plage du 01/01/1753 au 31/12/9999, et le composant correspondant des valeurs de type SMALLDATETIME est stocké dans la plage du 01/01/1900. au 06/06/2079. Le composant temporel est stocké dans un deuxième champ de 4 octets (2 octets pour les valeurs SMALLDATETIME) sous la forme du nombre de trois centièmes de seconde (pour DATETIME) ou du nombre de minutes (pour SMALLDATETIME) écoulées depuis minuit.

Si vous souhaitez uniquement stocker le composant date ou heure, l'utilisation des valeurs DATETIME ou SMALLDATETIME est quelque peu gênante. Pour cette raison, les types de données ont été introduits dans SQL Server DATE Et TEMPS, qui stockent respectivement uniquement les composants date et heure des valeurs DATETIME. Les valeurs DATE occupent 3 octets, représentant la plage de dates du 01/01/0001 au 31/12/9999. Les valeurs TIME occupent 3 à 5 octets et représentent le temps avec une précision de 100 ns.

Type de données DATEHEURE2 utilisé pour représenter les valeurs de date et d'heure avec une grande précision. Selon les besoins, les valeurs de ce type peuvent être définies dans différentes longueurs et occupent de 6 à 8 octets. La composante temps représente le temps à 100 ns près. Ce type de données ne prend pas en charge l'heure d'été.

Tous les types de données temporaires évoqués jusqu'à présent ne prennent pas en charge les fuseaux horaires. Type de données DATETIMEOFFSET a un composant pour stocker le décalage horaire. Pour cette raison, les valeurs de ce type occupent 6 à 8 octets. Toutes les autres propriétés de ce type de données sont identiques à celles du type de données DATETIME2.

Les valeurs de date dans Transact-SQL sont définies par défaut comme une chaîne au format « mmm jj aaaa » (par exemple, « 10 janvier 1993 ») entourée de guillemets simples ou doubles. (Mais l'ordre relatif des composants du mois, du jour et de l'année peut être modifié à l'aide de l'instruction DÉFINIR LEFORMAT DE DATE. De plus, le système prend en charge les valeurs numériques pour le composant mois et les délimiteurs / et -.) De même, la valeur temporelle est spécifiée au format 24 heures sous la forme « hh:mm » (par exemple, « 22:24 »). .

Transact-SQL prend en charge différents formats pour saisir les valeurs DATETIME. Comme mentionné, chaque composant est défini séparément, de sorte que les valeurs de date et d'heure peuvent être spécifiées dans n'importe quel ordre ou séparément. Si l'un des composants n'est pas spécifié, le système utilise la valeur par défaut pour celui-ci. (L'heure par défaut est minuit (avant midi).)

Types de données binaires et binaires

Il existe deux types de types de données binaires : BINARY et VARBINARY. Ces types de données décrivent des objets de données au format interne du système et sont utilisés pour stocker des chaînes de bits. Pour cette raison, les valeurs de ces types sont saisies à l'aide de nombres hexadécimaux.

Les valeurs de type bit ne contiennent qu'un seul bit, donc jusqu'à huit valeurs de ce type peuvent être stockées dans un octet. Une brève description des propriétés des types de données binaires et bit est donnée dans le tableau ci-dessous :

Type de données LOB

Type de données LOB (grand objet) utilisé pour stocker des objets de données d’une taille maximale de 2 Go. De tels objets sont généralement utilisés pour stocker de grandes quantités de données texte et pour charger des plug-ins et des fichiers audio et vidéo. Transact-SQL prend en charge les types de données LOB suivants :

À partir de SQL Server 2005, le même modèle de programmation est utilisé pour accéder aux valeurs des types de données standard et aux valeurs des types de données LOB. En d'autres termes, vous pouvez utiliser des fonctions système et des opérateurs de chaîne pratiques pour travailler avec des objets LOB.

Dans le moteur de base de données Paramètre MAX utilisé avec les types de données VARCHAR, NVARCHAR et VARBINARY pour définir des valeurs de colonne de longueur variable. Lorsque la valeur de longueur par défaut MAX est utilisée au lieu de spécifier explicitement la longueur d'une valeur, le système examine la longueur d'une chaîne particulière et décide s'il doit stocker cette chaîne en tant que valeur normale ou en tant que valeur LOB. Le paramètre MAX spécifie que la taille des valeurs de colonne peut aller jusqu'à la taille LOB maximale du système.

Bien que le système décide de la manière dont les objets LOB sont stockés, les paramètres par défaut peuvent être remplacés à l'aide de la procédure système sp_tableoption avec l'argument LARGE_VALUE_TYPES_OUT_OF_ROW. Si cet argument est défini sur 1, alors les données des colonnes déclarées à l'aide du paramètre MAX seront stockées séparément des autres données. Si l'argument est 0, le moteur de base de données stocke toutes les valeurs jusqu'à 8 060 octets dans la ligne du tableau en tant que données normales et stocke les valeurs plus grandes hors ligne dans la zone de stockage LOB.

À partir de SQL Server 2008, vous pouvez utiliser VARBINARY(MAX) pour les colonnes de type Attribut FILESTREAM pour sauvegarder des données BLOB (grand objet binaire) directement sur le système de fichiers NTFS. Le principal avantage de cet attribut est que la taille de l'objet LOB correspondant est limitée uniquement par la taille du volume du système de fichiers.

Type de données UNIQUEIDENTIFIER

Comme son nom l'indique, le type de données UNIQUEIDENTIFIER est un numéro d'identification unique stocké sous forme de chaîne binaire de 16 octets. Ce type de données est étroitement lié à l'identifiant GUID (Globally Unique Identifier - identifiant globalement unique), ce qui garantit l'unicité à l'échelle mondiale. Ainsi, ce type de données permet d'identifier de manière unique les données et les objets dans les systèmes distribués.

Vous pouvez initialiser une colonne ou une variable de type UNIQUEIDENTIFIER à l'aide de la fonction NEWID ou NEWSEQUENTIALID, ou à l'aide d'une constante de chaîne de format spécial composée de chiffres hexadécimaux et de tirets. Ces fonctionnalités sont abordées dans le prochain article.

Une colonne avec des valeurs du type de données UNIQUEIDENTIFIER est accessible en utilisant dans une requête mot-clé ROWGUIDCOL pour indiquer que la colonne contient des valeurs d'ID. (Ce mot clé ne génère aucune valeur.) Une table peut contenir plusieurs colonnes UNIQUEIDENTIFIER, mais une seule d'entre elles peut avoir le mot clé ROWGUIDCOL.

Type de données SQL_VARIANT

Le type de données SQL_VARIANT peut être utilisé pour stocker simultanément des valeurs de différents types, telles que des valeurs numériques, des chaînes et des dates. (L'exception concerne les valeurs TIMESTAMP.) Chaque valeur de colonne SQL_VARIANT se compose de deux parties : la valeur elle-même et les informations décrivant cette valeur. Ces informations contiennent toutes les propriétés du type de données de valeur réelle, telles que la longueur, l'échelle et la précision.

Pour accéder et afficher des informations sur les valeurs d'une colonne de type SQL_VARIANT, utilisez la fonction SQL_VARIANT_PROPERTY.

Vous ne devez déclarer un type de colonne comme SQL_VARIANT que si cela est vraiment nécessaire. Par exemple, si la colonne est destinée à stocker des valeurs de différents types de données, ou si le type de données qui seront stockées dans cette colonne est inconnu lors de la création de la table.

Type de données HIÉRARCHIEID

Le type de données HIERARCHYID est utilisé pour stocker une hiérarchie complète. Par exemple, une valeur de ce type peut stocker une hiérarchie de tous les employés ou une hiérarchie de dossiers. Ce type est implémenté en tant que type défini par l'utilisateur CLR qui couvre plusieurs fonctions système pour créer et utiliser des nœuds de hiérarchie. Les fonctions suivantes, entre autres, appartiennent aux méthodes de ce type de données : GetLevel(), GetAncestor(), GetDescendant(), Read() et Write().

Type de données TIMESTAMP

Le type de données TIMESTAMP spécifie une colonne définie comme VARBINARY(8) ou BINARY(8) , en fonction de la possibilité de nullité de la colonne. Pour chaque base de données, le système gère un compteur dont la valeur est incrémentée chaque fois qu'une ligne contenant une cellule TIMESTAMP est insérée ou mise à jour, et attribue cette valeur à cette cellule. Ainsi, à l'aide des cellules TIMESTAMP, vous pouvez déterminer l'heure relative de la dernière modification des lignes correspondantes du tableau. ( VERSION LIGNE est un synonyme de TIMESTAMP.)

En soi, la valeur stockée dans une colonne TIMESTAMP n'est pas importante. Cette colonne est généralement utilisée pour déterminer si une ligne de tableau particulière a changé depuis son dernier accès.

Options de stockage

À partir de SQL Server 2008, il existe deux options de stockage différentes, qui vous permettent toutes deux de stocker des LOB et d'économiser de l'espace disque. Ce sont les options suivantes :

    stocker des données de type FILESTREAM ;

    stockage à l’aide de colonnes clairsemées.

Ces options de stockage sont abordées dans les sous-sections suivantes.

Stockage des données FILESTREAM

Comme mentionné précédemment, SQL Server prend en charge le stockage d'objets volumineux (LOB) via le type de données VARBINARY(MAX). La propriété de ce type de données est que les objets binaires volumineux (BLOB) sont stockés dans la base de données. Cela peut entraîner des problèmes de performances lors du stockage de fichiers très volumineux, tels que des fichiers audio ou vidéo. Dans de tels cas, ces données sont stockées en dehors de la base de données dans des fichiers externes.

Le stockage de données FILESTREAM prend en charge la gestion des objets LOB stockés sur le système de fichiers NTFS. Le principal avantage de ce type de stockage est que même si les données sont stockées en dehors de la base de données, elles sont gérées par la base de données. Ainsi, ce type de stockage possède les propriétés suivantes :

    Les données FILESTREAM peuvent être enregistrées à l'aide de l'instruction CREATE TABLE, et pour travailler avec ces données, vous pouvez utiliser des instructions pour modifier les données (SELECT, INSERT, UPDATE et DELETE) ;

    Le système de gestion de base de données offre le même niveau de sécurité pour les données FILESTREAM que pour les données stockées dans la base de données.

Colonnes clairsemées

L'objectif de l'option de stockage fournie par les colonnes clairsemées est très différent de celui du type de stockage FILESTREAM. Alors que le but du stockage FILESTREAM est de stocker les objets LOB en dehors de la base de données, le but des colonnes clairsemées est de minimiser l'espace disque consommé par la base de données.

Les colonnes de ce type permettent d'optimiser le stockage des colonnes dont les valeurs majoritaires sont nulles. Lors de l'utilisation de colonnes clairsemées, le stockage de valeurs nulles ne nécessite pas d'espace disque, mais en revanche, le stockage de valeurs non nulles nécessite 2 à 4 octets supplémentaires, selon leur type. Pour cette raison, Microsoft recommande d'utiliser des colonnes clairsemées uniquement dans les cas où au moins 20 % des économies globales d'espace disque sont attendues.

Les colonnes éparses sont définies de la même manière que les autres colonnes de table ; il en va de même pour y répondre. Cela signifie que vous pouvez utiliser les instructions SELECT, INSERT, UPDATE et DELETE pour accéder aux colonnes clairsemées de la même manière que vous accédez aux colonnes normales. La seule différence concerne la création de colonnes clairsemées : pour définir une colonne spécifique comme clairsemée, utilisez Argument clairsemé après le nom de la colonne, comme indiqué dans cet exemple :

nom_colonne type_données SPARSE

Plusieurs colonnes de tableau clairsemée peuvent être regroupées dans un ensemble de colonnes. Cet ensemble serait un moyen alternatif de stocker et d'accéder aux valeurs dans toutes les colonnes clairsemées d'une table.

Valeur NULLE

Null est une valeur spéciale qui peut être attribuée à une cellule du tableau. Cette valeur est généralement utilisée lorsque les informations contenues dans une cellule sont inconnues ou non applicables. Par exemple, si vous ne connaissez pas le numéro de téléphone personnel d'un employé de l'entreprise, nous vous recommandons de définir la cellule correspondante dans la colonne home_telephone sur null.

Si la valeur d'un opérande d'une expression arithmétique est nulle, la valeur du résultat de l'évaluation de cette expression sera également nulle. Par conséquent, dans les opérations arithmétiques unaires, si la valeur de l’expression A est nulle, alors +A et -A renvoient null. Dans les expressions binaires, si la valeur de l'un ou des deux opérandes A et B est nulle, alors le résultat de l'addition, de la soustraction, de la multiplication, de la division et de la modulation de ces opérandes sera également nul.

Si une expression contient un opérateur de comparaison et que l’un ou les deux de ses opérandes sont nuls, le résultat de cette opération sera également nul.

La valeur null doit être différente de toutes les autres valeurs. Pour les types de données numériques, les valeurs 0 et null ne sont pas identiques. La même chose s'applique à la chaîne vide et null pour les types de données caractère.

Les valeurs nulles ne peuvent être stockées dans une colonne de tableau que si cela est explicitement autorisé dans la définition de la colonne. En revanche, les valeurs nulles ne sont pas autorisées pour une colonne sauf si sa définition indique explicitement NOT NULL. Si une colonne avec un type de données (sauf TIMESTAMP) n'est pas explicitement spécifiée comme NULL ou NOT NULL, alors les valeurs suivantes sont attribuées :

    NULL si la valeur du paramètre ANSI_NULL_DFLT_ON L'instruction SET est activée.

    NOT NULL si le paramètre ANSI_NULL_DFLT_OFF de l'instruction SET est activé.

Si l'instruction set n'est pas activée, la colonne sera par défaut NOT NULL. (Les valeurs nulles ne sont pas autorisées pour les colonnes TIMESTAMP.)



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :