Le choix du type de données approprié pour une colonne de table est une décision importante. Il réduit le besoin de conversions de types de données, améliore les performances des requêtes de base de données et minimise les besoins en stockage.
Dans ce guide, vous explorez les différents types de données utilisés dans les systèmes de gestion de bases de données relationnelles (RDBMS). Ces types de données peuvent être utilisés lors de la création ou de la modification d'une table, ou lors de la déclaration de variables dans des procédures stockées de base de données. Certains SGBDR bien connus sont MySQL et PostgreSQL.
Types de données binaires SQL
Pour stocker des données binaires (0
ou 1
), vous utilisez le BINARY
et VARBINARY
Types de données. Le BINARY
le type de données stocke des données binaires de longueur fixe, tandis que VARBINARY
stocke des données binaires de longueur variable. Ces deux types de données sont utilisés pour stocker des chaînes de bits (0
et 1
's). Leurs valeurs sont attribuées et récupérées à l'aide d'une représentation hexadécimale, qui est indiquée par un préfixe de 0x
. Les colonnes (ou variables) du Binary
et VarBinary
les types de données sont utilisés pour stocker le contenu de fichiers image tels que JPEG, BMP, fichiers de documents, etc.
Par exemple, pour une valeur décimale de 63
, sa valeur hexadécimale est représentée par 0x3F
et son équivalent de chaîne binaire binaire est 111111
. Pour comprendre la valeur de ces chaînes binaires et comment elles sont stockées, considérons l'exemple ci-dessous :
Remarque Sauf mention contraire, toutes les commandes de base de données présentées dans ce guide fonctionnent bien sur MySQL et PostgreSQL .
-
À partir de la ligne de commande, créez une table appelée
BinaryExample
comme indiqué ci-dessous :CREATE TABLE BinaryExample ( BinaryCol BINARY (10), VarBinaryCol VARBINARY (10) );
-
Insérez une ligne dans le
BinaryExample
tableau :INSERT INTO BinaryExample (BinaryCol, VarBinaryCol) VALUES (0x4D7953514C, 0x39274D);
-
Sélectionnez les données dans
BinaryExample
tableau :SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
La sortie ressemble à ceci :
+------------------------+----------------------------+ | BinaryCol | VarBinaryCol | +------------------------+----------------------------+ | 0x4D7953514C0000000000 | 0x39274D | +------------------------+----------------------------+
Comme vous pouvez le voir, le BinaryCol
les données sont remplies à la taille de colonne maximale avec des zéros à la fin, mais le VarBinaryCol
la colonne de données ne l'est pas. C'est parce que les colonnes de VarBinaryCol
sont définis comme étant de longueur variable.
Remarque La taille maximale (longueur) des types de données Binary et VarBinary varie en fonction de l'implémentation de la base de données. Ils sont généralement assez volumineux (plus de 8 000 octets). Certaines implémentations de base de données ont des extensions binaires à ces types de données de base qui peuvent stocker des données dans des tailles de plusieurs gigaoctets.
Types de données numériques SQL
Les types de données numériques disponibles peuvent être répartis dans les groupes suivants :types de données numériques entiers, types de données numériques exacts et types de données numériques approximatifs. Les sections ci-dessous traitent de chaque groupe.
Types de données numériques entiers
Les types de données entiers peuvent être non signés et signés. Non signé ne peut stocker que des nombres nuls et positifs, alors que Signé autorise les nombres nuls, positifs et négatifs.
La plupart des implémentations SQL prennent en charge les types de données Integer de INT
, SMALLINT
, et TINYINT
pour le stockage des nombres entiers positifs et négatifs. Le type de données numérique entier que vous choisissez dépend de la plage de valeurs que vous devez stocker.
Le tableau suivant affiche le stockage autorisé en octets pour les types de données numériques entiers, ainsi que leurs valeurs SIGNÉES minimales et maximales.
Type | Stockage (octets) | Valeur minimale SIGNÉE | Valeur maximale SIGNÉE |
---|---|---|---|
INT | 4 | moins 2^31 (-2147483648) | plus 2^31 (2147483647) |
SMALLINT | 2 | moins 2^15 (-32768) | plus 2^15 (32767) |
TINYINT | 1 | -128 | 127 |
L'exemple ci-dessous illustre les valeurs signées minimales et maximales des types de données numériques Integer à l'aide d'une table nommée NumericExample
.
-
Depuis la ligne de commande, créez le
NumericExample
tableau.CREATE TABLE NumericExample ( IntColumn INT, SmallIntColumn SMALLINT, TinyIntColumn TINYINT );
-
Insérez les valeurs suivantes dans le
NumericExample
tableau.INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (3258594758, 32767, 255);
Lorsque vous exécutez la commande ci-dessus, vous obtenez un
Out of range
erreur comme indiqué dans la sortie ci-dessous. Vous ne pouvez pas insérer les valeurs3258594758
et255
àIntColumn
etTinyIntColumn
respectivement. En effet, la valeur SIGNÉE maximale pour un type de données entier est2147483647
et celle d'un TinyInt est127
.ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
-
Mettre à jour les valeurs de
IntColumn
etTinyIntColumn
colonnes et réexécutez leINSERT
commande.INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (2147483647, 32767, 127);
-
Récupérez les valeurs des colonnes à l'aide de
SELECT
déclaration :SELECT IntColumn, SmallIntColumn, TinyIntColumn FROM NumericExample;
Le résultat ressemble à l'exemple ci-dessous :
+------------+----------------+---------------+ | IntColumn | SmallIntColumn | TinyIntColumn | +------------+----------------+---------------+ | 2147483647 | 32767 | 127 | +------------+----------------+---------------+
Types de données numériques décimales (numériques exacts)
Les types de données Décimal, DECIMAL
et NUMERIC
, stocker des valeurs numériques exactes et fixes. Ces types de données sont également appelés numériques exacts Types de données. Ils stockent une valeur entière à gauche de la virgule décimale et une valeur fractionnaire à droite de la virgule décimale. Ils sont fonctionnellement équivalents avec les mêmes exigences de stockage. Le stockage utilisé pour ces types dépend de la précision et des plages spécifiées. Ils peuvent aller de 2 octets à 17 octets, et leurs valeurs peuvent aller de -10^38 +1
à +10^38 -1
.
Ces deux types de données sont définis par une précision et une échelle . La précision indique le nombre de places à gauche et à droite de la virgule décimale combinées, tandis que l'échelle indique le nombre total de chiffres à droite de la virgule décimale. Ces deux types de données sont créés en utilisant la syntaxe suivante :
DECIMAL(precision, scale)
ou
NUMERIC(precision,scale)
L'exemple ci-dessous montre comment créer et utiliser le type de données numérique décimal.
-
Depuis la ligne de commande, créez le
ExactNumericExample
tableau.CREATE TABLE ExactNumericExample ( DecimalCol DECIMAL(5,2), NumericCol NUMERIC(7,2) );
-
Insérez les valeurs suivantes dans le
ExactNumericExample
tableau.INSERT INTO ExactNumericExample (DecimalCol, NumericCol) VALUES (123.45, 12345.67);
-
Récupérez les valeurs des colonnes à l'aide de
SELECT
déclaration :SELECT DecimalCol, NumericCol FROM ExactNumericExample;
Le résultat ressemble à ce qui suit :
+------------+------------+ | DecimalCol | NumericCol | +------------+------------+ | 123.45 | 12345.67 | +------------+------------+
Types de données numériques à virgule flottante (numérique approximatif)
Les types de données numériques à virgule flottante sont FLOAT
et REAL
. Ils sont aussi appelés nombre approximatif Types de données. Ces types de données stockent une valeur approximative en raison de la représentation binaire des données à virgule flottante. La syntaxe pour créer une colonne ou une variable à virgule flottante est la suivante :
Float(N)
Le paramètre N
indique si le champ doit contenir quatre ou huit octets. Une valeur de N
supérieur à sept nécessite huit octets ; sept ou moins nécessite quatre octets. La précision flottante pour ce type de données est comprise entre -1.79E + 308
à 1.79E + 308
.
De même, une colonne et une variable définies comme type de données REAL
occupe quatre octets de stockage et fournit une plage de valeurs allant de -3.40E + 38
à 3.40E + 38
.
Types de données de caractères SQL
Les types de données CHAR
et VARCHAR
sont utilisés pour stocker des données de caractères jusqu'à 8 000 octets de longueur. Ces deux types de données stockent des valeurs de chaîne dans des colonnes de base de données, mais ils diffèrent dans la manière dont leurs valeurs sont stockées et récupérées. La longueur du CHAR
Le type de données reste fixe à sa longueur spécifiée, que cet espace d'allocation soit utilisé ou non. Si l'espace n'est pas utilisé, la colonne ou la variable est complétée par des espaces supplémentaires. VARCHAR
affiche la valeur telle quelle, sans aucun espace supplémentaire.
L'exemple ci-dessous illustre le type de données caractère.
-
Depuis la ligne de commande, créez le
Employee
tableau.CREATE TABLE Employee ( LastName VARCHAR(25), FirstName VARCHAR(20), Sex CHAR(1) );
-
Insérez les valeurs suivantes dans le
Employee
tableau.INSERT INTO Employee (LastName, FirstName, Sex) VALUES ('Jones', 'Mary', 'F');
-
Récupérez les valeurs des colonnes à l'aide de
SELECT
déclaration :SELECT LastName, FirstName, Sex FROM Employee;
La sortie devrait être la suivante :
+----------+-----------+------+ | LastName | FirstName | Sex | +----------+-----------+------+ | Jones | Mary | F | +----------+-----------+------+
Les colonnes LastName
et Firstname
sont déclarés de type Varchar
. Cela permet aux noms d'être aussi longs que la définition du type de données. Mais pour les noms plus courts que le maximum spécifié, aucun espace n'est ajouté aux données de ces colonnes.
Type de données de date et d'heure SQL
Le DATETIME
Le type de données est utilisé pour stocker les valeurs de date et d'heure dans la base de données. Valeurs pour le DATETIME
Le type de données utilise quatre octets de stockage pour la partie date et quatre octets pour la partie heure. La partie heure de ce type de données spécifie l'heure avec une granularité allant jusqu'au nombre de millisecondes après minuit. La précision pour ce type de données va du "1er janvier 1753" au "31 décembre 9999", avec une précision de 3,33 millisecondes.
Remarque Si vous affectez uniquement la valeur de date à un DATETIME
colonne ou variable de type de données, la partie heure par défaut est minuit.
L'exemple ci-dessous illustre le DATETIME
type de données.
DELIMITER //
CREATE PROCEDURE Datetimedemo()
BEGIN
DECLARE BirthDate DATETIME
SET BirthDate = '1990-01-01 09:00:00'
SELECT BirthDate
END//
DELIMITER ;
call Datetimedemo;
Le résultat ressemble à ce qui suit :
+----------+-----------+
| BirthDate |
+----------+-----------+
| 1990-01-01 09:00:00 |
+----------+-----------+
Remarque Certaines implémentations SQL prennent en charge des types de données supplémentaires, qui sont soit un sous-ensemble, un sur-ensemble ou une variante de tous les types de données spécifiés ci-dessus.
Considérations sur les types de données SQL
Lors de la conception d'une base de données, il est extrêmement important de sélectionner avec soin les types de données appropriés pour les colonnes de table et les variables de procédure stockée.
Les choix effectués peuvent avoir un impact significatif sur l'efficacité du stockage et les performances globales de la base de données. Un exemple simple consiste à définir l'Age
d'une personne la colonne doit être du Tinyint
type de données, par opposition au Int
Type de données. Cela est dû aux raisons suivantes :
- Comme indiqué précédemment,
Tinyint
les types de données ont ¼ des exigences de stockage deInt
types de données. - L'efficacité de récupération d'un
Tinyint
colonne par rapport à unInt
colonne est beaucoup plus grande.
À première vue, cela peut ne pas sembler être une grande préoccupation. Mais, si la table affectée contient des millions de lignes, l'efficacité du stockage et des performances peut certainement être atteinte. Si vous étendez ces critères de conception à l'ensemble d'une base de données, vous pouvez générer ces gains d'efficacité par ordre de grandeur.
Consacrer le temps de conception nécessaire à la sélection du type de données de la base de données peut potentiellement atténuer la nécessité d'effectuer des conversions de type coûteuses dans les requêtes et la logique de procédure stockée, lors de la comparaison de colonnes de différents types de données.
Par exemple, dans une table, vous stockez une date dans un Varchar(20)
colonne, et dans une autre table vous stockez une date dans un Datetime
colonne. Si vous devez comparer les deux colonnes, vous devez utiliser une fonction de conversion de type de données dans une requête sur l'une des deux colonnes. C'est une opération coûteuse.
Conclusion
Les types de données SQL sont les attributs associés aux colonnes et aux variables de la base de données. Ces attributs peuvent prendre la forme d'éléments binaires, numériques, de caractères et de date/heure. Un temps de conception minutieux est nécessaire pour s'assurer que les colonnes et les variables sont définies avec un type de données correct, afin d'assurer à la fois l'efficacité du stockage et de l'exécution des requêtes.