Je veux juste savoir quel est l’avantage/l’usage de définir ZEROFILL
pour INT
DataType dans MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Lorsque vous sélectionnez une colonne de type ZEROFILL, la valeur affichée du champ avec des zéros est complétée 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 de ZEROFILL et d'une largeur d'affichage n'a aucun effet sur la manière dont les données sont stockées. Cela n'affecte que son affichage.
Voici un exemple de code SQL illustrant 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 pourrait être intéressante:
En Allemagne, nous avons des codes postaux à 5 chiffres. Toutefois, ces codes peuvent commencer par un zéro, de sorte que 80337 est un code postal valide pour munic, 01067 est un code postal de Berlin.
Comme vous le voyez, tous les citoyens allemands s'attendent à ce que les codes postaux soient affichés sous forme de code à 5 chiffres. 1067 est donc étrange.
Afin de stocker ces données, vous pouvez utiliser un ZEROFILL VARCHAR (5) ou INT (5), alors que le nombre entier zerofilled présente deux grands avantages:
Peut-être que cet exemple aide à comprendre l’utilisation de ZEROFILL.
C'est une fonctionnalité pour les personnalités perturbées qui aiment les boîtes carrées.
Vous insérez
1
23
123
mais lorsque vous sélectionnez, il remplit les valeurs
000001
000023
000123
Il est utile de trier correctement dans le cas où vous aurez besoin de concaténer cet "entier" avec quelque chose d'autre (un autre numéro ou texte) qui devra ensuite être trié comme un "texte".
par exemple,
si vous devez utiliser les nombres entiers du champ (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 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 une valeur minuscule, vous convertissez efficacement ces valeurs en INT et en supprimant toute confusion que votre application peut créer 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).
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é avec l'attribut facultatif (non standard) ZEROFILL, le remplissage d'espaces par défaut 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 permettent l'attribut UNSIGNED autorisent également SIGNED. Cependant, ces types de données sont signés par défaut, l'attribut SIGNED n'a donc aucun effet.
La description ci-dessus est tirée du site officiel de MYSQL.
ZEROFILL
Cela signifie essentiellement que si la valeur entière 23 est insérée dans une colonne INT de largeur 8, le reste de la position disponible sera automatiquement complété par des zéros.
Par conséquent
23
devient:
00000023