Je veux juste savoir quel est l'intérêt/utilisation de définir ZEROFILL
para INT
DataType dans MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Je veux juste savoir quel est l'intérêt/utilisation de définir ZEROFILL
para INT
DataType dans MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Lorsque vous sélectionnez une colonne de type ZEROFILL
il remplit la valeur affichée du champ de zéros jusqu'à la largeur d'affichage spécifiée dans la définition de la colonne. Les valeurs plus longues que la largeur d'affichage ne sont pas tronquées. Notez que l'utilisation de ZEROFILL
implique également UNSIGNED
.
Utilisation de ZEROFILL
et une largeur d'affichage n'a aucun effet sur la façon dont les données sont stockées. Elle n'affecte que la façon dont elles sont affichées.
Voici un exemple de SQL qui démontre l'utilisation de la fonction ZEROFILL
:
CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;
Résultat :
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
@diEcho : Si par exemple vous voulez que tous vos numéros de facture soient affichés avec 10 chiffres, vous pouvez déclarer le type de cette colonne comme INT(10) ZEROFILL.
Je vous recommande vivement de ne pas utiliser cette fonctionnalité - la façon dont une valeur numérique est affichée/formatée est une question de présentation, et n'a absolument rien à faire au niveau de la base de données ; du moins pas si vous utilisez la base de données pour soutenir un logiciel. Sachez que cela peut causer des problèmes - si vous analysez une valeur avec un zéro en tête comme un nombre entier, de nombreux analyseurs syntaxiques considéreront la valeur comme octale, ce qui n'est probablement pas ce que vous voulez. La seule fois où vous devriez utiliser cette fonctionnalité, c'est pour optimiser le stockage, lorsque ce que vous stockez réellement est une chaîne de chiffres (de longueur fixe).
@mindplay.dk : Ça dépend. Si vous stockez quelque chose comme un GTIN, il doit comporter 14 chiffres, mais il peut aussi n'en comporter que 8 et être complété par des zéros. Se fier au côté sortie ne serait pas correct dans ce cas, car il ne s'agit pas simplement d'une décimale, mais d'une clé.
Un exemple afin de comprendre, où l'utilisation de ZEROFILL
pourrait être intéressant :
En Allemagne, nous avons des codes postaux à 5 chiffres. Cependant, ces codes peuvent commencer par un zéro, donc 80337
est un code postal valide pour munic, 01067
est un code postal de Berlin.
Comme vous le voyez, tout citoyen allemand s'attend à ce que les codes postaux soient affichés sous la forme d'un code à 5 chiffres, donc 1067
semble étrange.
Afin de stocker ces données, vous pouvez utiliser un fichier VARCHAR(5)
o INT(5) ZEROFILL
alors que l'entier à remplissage zéro présente deux grands avantages :
1067
vous obtenez toujours 01067
arrièrePeut-être que cet exemple aide à comprendre l'utilisation de ZEROFILL
.
Il convient d'ajouter que le Client SQL qui affiche les données est responsable du formatage des chiffres avec des zéros de tête. Ce n'est pas quelque chose qui se produit "automatiquement" avec chaque application qui récupère les données.
Les colonnes à largeur fixe sont également préférables, car elles réduisent la fragmentation sur le disque.
@Phil, En pratique, la plupart des bibliothèques clientes (par exemple PHP) n'enlèvent-elles pas simplement les zéros avant de les transmettre au code de l'application ? Si c'est le cas, alors cela semble vraiment inutile. Une mauvaise conception dans les premiers jours de MySQL.
Il permet un tri correct dans le cas où vous auriez besoin de concaténer ce "nombre entier" avec quelque chose d'autre (un autre nombre ou un texte) qui devra ensuite être trié comme un "texte".
par exemple,
si vous devez utiliser les numéros de champs entiers (disons 5) concaténés comme A-005 ou 10/0005
Je sais que j'arrive tard dans la soirée mais je trouve que le zerofill est utile pour les représentations booléennes de TINYINT(1). Null ne signifie pas toujours False, parfois on ne le veut pas. En remplissant à zéro un tinyint, vous convertissez effectivement ces valeurs en INT et vous supprimez toute confusion que votre application pourrait avoir lors de l'interaction. Votre application peut alors traiter ces valeurs d'une manière similaire au type de données primitif True = Not(0).
Merci, mais malheureusement je viens de faire quelques tests avec une base de données mysql et il ne remplit pas les valeurs nulles :-/. Cet objectif est toujours atteint en contraignant le champ à ne pas autoriser les valeurs nulles. Je ne devrais pas essayer de répondre à des questions sur des bases de données que je n'utilise pas habituellement. Je vais supprimer ma réponse avant que les gens ne soient trop heureux de me descendre. lol
Utile ? C'est incorrect. Zerofill ne fait rien (sauf ajouter Unsigned) lorsque la longueur de l'affichage est de 1.
@Marlin et vous devriez toujours définir une valeur par défaut pour true ou false... si vous n'utilisez pas de valeurs par défaut alors le problème que vous avez mentionné ne sera PAS le seul... NOT NULL est également un must :)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
9 votes
Les lecteurs doivent également noter que
zerofill
n'est pas standard. " ElZEROFILL
est ignoré quand une colonne est impliquée dans des expressions ou desUNION
des requêtes. Si vous stockez des valeurs plus grandes que la largeur d'affichage dans une colonne de nombres entiers qui a l'attributZEROFILL
vous pouvez rencontrer des problèmes lorsque MySQL génère des tables temporaires pour certaines jointures complexes. Dans ces cas, MySQL suppose que les valeurs des données tiennent dans la largeur d'affichage de la colonne. "0 votes
Bonne question. Des questions connexes pourraient également être posées : Y a-t-il de bonnes raisons de ne pas utiliser ZEROFILL ? Quels sont les inconvénients et les pièges potentiels de l'utilisation de ZEROFILL ? Les avantages l'emportent-ils sur les inconvénients ?
0 votes
Voir l'explication stackoverflow.com/questions/5634104/