Bonjour,
Quelle est la taille en bytes d'une valeur NULL dans un champ:
CHAR(n)
VARCHAR(n)
INT
?
Merci d'avance![]()
Bonjour,
Quelle est la taille en bytes d'une valeur NULL dans un champ:
CHAR(n)
VARCHAR(n)
INT
?
Merci d'avance![]()
Aucune ! NULL n'étant pas une valeur il n'est donc pas stockable !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci Frédéric, ta réponse est des plus logiques![]()
j'ai une petite question, à quoi sert alors le mot clé SPARSE alors dans SQL 2008 si déjà NULL ne prend pas de place ?
Bonjour,
J'ai trouvé votre question intéressante. J'ai essayé d'apporter quelques éléments de réponse ici.
Globallement, NULL consomme de la place dans une colonne de table, parce qu'elle est potentiellement NULL, sauf à utiliser les colonnes fragmentées de 2008, qui ajoutent quand même 2 à 4 octets d'espace de stockage pour chaque valeur (NOT NULL) de la table !
@+
Sans doute me suis-je mal exprimé, mais la demande étais claire :
NULL n'étant pas une valeur, aucun espace n'est utilisé pour le stocker.Quelle est la taille en bytes d'une valeur NULL dans un champ
Pour autant, le volume de la colonne pourvue d'un type de données n'est pas égal à zéro...
Ainsi :
1) toute ligne d'une table est pourvue d'une matrice de nullabilité qui occupe de la place : 1 octets si la table a moins de 8 colonnes, 2 si la table à 9 à 16 colonnes... Exactement : (n / 8) + 1.
2) les types de données de taille fixe (DATE, INT, CHAR....), occupent toujours la même place que la données existe ou pas (NULL)
3) les types de données de taille variable (VARCHAR, NVARCHAR, VARBINARY) occupent la même place que précédemment (par exemple si une colonne VARCHAR(32) contenait 'toto', alors la nullification de cette colonne prendra 6 octets : 4 pour la donnée, 2 pour la taille de la donnée
4) depuis la version 2008 édition Enterprise uniquement, l'option sparse permet en effet de compresser les informations inexistantes dans certaines conditions (pas applicable à tous les types de données). Reste que cela n'a d'efficacité qu'à partir de quelques millions de lignes, donc pour des VLDB !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci SQLPro,
Ce sont des précisions très intéressantes.
@+
Je suis assez surpris de voir remonter ce post des catacombes du forum
Merci pour les petites précisions !
PS : Sympa l'article![]()
Partager