web-dev-qa-db-fra.com

Quel est l'avantage de zerofill dans MySQL?

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 
151
diEcho

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
235
Mark Byers

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:

  1. Lot moins d'espace de stockage sur le disque dur
  2. Si vous insérez 1067, vous obtenez toujours 01067

Peut-être que cet exemple aide à comprendre l’utilisation de ZEROFILL.

125
Phil

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
58
Elijah Saounkine

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

15
Ken

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).

4
Marlin
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)
3
zloctb

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.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

1
Daniel Kutik

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.

1
Adeel

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
0
Simon H