Je veux juste savoir quel est l'avantage / l'utilisation de définir ZEROFILL
pour INT
DataType dans MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Je veux juste savoir quel est l'avantage / l'utilisation de définir ZEROFILL
pour INT
DataType dans MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Réponses:
Lorsque vous sélectionnez une colonne avec un type ZEROFILL
, la valeur affichée du champ est remplie de zéros jusqu'à la largeur d'affichage spécifiée dans la définition de colonne. Les valeurs plus longues que la largeur d'affichage ne sont pas tronquées. Notez que l'utilisation de ZEROFILL
implique également UNSIGNED
.
L'utilisation d' ZEROFILL
une largeur d'affichage et n'a aucun effet sur la façon dont les données sont stockées. Cela n'affecte que la façon dont il est affiché.
Voici un exemple de SQL qui illustre l'utilisation de 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
Un exemple pour comprendre où l'utilisation de ZEROFILL
peut être intéressante:
En Allemagne, nous avons des codes postaux à 5 chiffres. Cependant, ces codes peuvent commencer par un zéro, donc 80337
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 forme de code à 5 chiffres, ce qui 1067
semble étrange.
Pour stocker ces données, vous pouvez utiliser un VARCHAR(5)
ou INT(5) ZEROFILL
alors que l'entier rempli à zéro présente deux grands avantages:
1067
, vous 01067
revenez toujoursPeut-être que cet exemple aide à comprendre l'utilisation de ZEROFILL
.
C'est une fonctionnalité pour les personnalités dérangées qui aiment les boîtes carrées.
Vous insérez
1
23
123
mais quand on sélectionne, ça remplit les valeurs
000001
000023
000123
Cela aide à corriger le tri dans le cas où vous auriez besoin de concaténer cet "entier" avec autre chose (un autre nombre ou un autre texte) qui nécessitera alors d'être trié comme un "texte".
par exemple,
si vous devez utiliser les nombres de champ entiers (disons 5) concaténés comme A-005 ou 10/0005
Je sais que je suis en retard à la fête mais je trouve que le zerofill est utile pour les représentations booléennes de TINYINT (1). Null ne signifie pas toujours faux, parfois vous ne le voulez pas. En remplissant à zéro un tinyint, vous convertissez efficacement ces valeurs en INT et supprimez toute confusion que votre application peut avoir lors de l'interaction. Votre application peut ensuite traiter ces valeurs d'une manière similaire au type de données primitif True = Not (0)
666
donc je préférerais garder cette réponse telle quelle;-)
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
Lorsqu'il est utilisé conjointement avec l'attribut facultatif (non standard) ZEROFILL, le remplissage par défaut des espaces est remplacé par des zéros. Par exemple, pour une colonne déclarée comme INT (4) ZEROFILL, une valeur de 5 est récupérée comme 0005.
Si vous spécifiez ZEROFILL pour une colonne numérique, MySQL ajoute automatiquement l'attribut UNSIGNED à la colonne.
Les types de données numériques qui autorisent l'attribut UNSIGNED autorisent également SIGNED. Cependant, ces types de données sont signés par défaut, donc l'attribut SIGNED n'a aucun effet.
La description ci-dessus est tirée du site officiel de MYSQL.
zerofill
n'est pas standard. " L'ZEROFILL
attribut est ignoré lorsqu'une colonne est impliquée dans des expressions ou desUNION
requêtes. Si vous stockez des valeurs supérieures à la largeur d'affichage dans une colonne d'entiers qui possède l'ZEROFILL
attribut, 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 de données correspondent à la largeur d'affichage de la colonne. "