Solo quiero saber cuál es el beneficio / uso de definir ZEROFILL
para INT
DataType en MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Solo quiero saber cuál es el beneficio / uso de definir ZEROFILL
para INT
DataType en MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Respuestas:
Cuando selecciona una columna con tipo ZEROFILL
, rellena el valor visualizado del campo con ceros hasta el ancho de visualización especificado en la definición de columna. Los valores más largos que el ancho de visualización no se truncan. Tenga en cuenta que el uso de ZEROFILL
también implica UNSIGNED
.
El uso ZEROFILL
y el ancho de la pantalla no tienen efecto sobre cómo se almacenan los datos. Afecta solo cómo se muestra.
Aquí hay un ejemplo de SQL que demuestra el uso 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;
Resultado:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
Un ejemplo para entender, donde el uso de ZEROFILL
podría ser interesante:
En Alemania, tenemos códigos postales de 5 dígitos. Sin embargo, esos códigos pueden comenzar con un cero, por lo que 80337
es un código postal válido para munic, 01067
es un código postal de Berlín.
Como puede ver, cualquier ciudadano alemán espera que los códigos postales se muestren como un código de 5 dígitos, por lo que se 1067
ve extraño.
Para almacenar esos datos, puede usar un VARCHAR(5)
o INT(5) ZEROFILL
mientras que el entero lleno de cero tiene dos grandes ventajas:
1067
, todavía 01067
regresaQuizás este ejemplo ayude a comprender el uso de ZEROFILL
.
Es una característica para personalidades perturbadas a las que les gustan las cajas cuadradas.
Inserta
1
23
123
pero cuando selecciona, rellena los valores
000001
000023
000123
Sé que llego tarde a la fiesta, pero creo que el zerofill es útil para las representaciones booleanas de TINYINT (1). Nulo no siempre significa falso, a veces no lo quieres. Al rellenar con un minúsculo, está efectivamente convirtiendo esos valores a INT y eliminando cualquier confusión que su aplicación pueda tener sobre la interacción. Su aplicación puede tratar esos valores de manera similar al tipo de datos primitivo True = Not (0)
666
lo que prefiero mantener esta respuesta tal como está;-)
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)
Cuando se usa junto con el atributo opcional (no estándar) ZEROFILL, el relleno predeterminado de espacios se reemplaza con ceros. Por ejemplo, para una columna declarada como INT (4) ZEROFILL, un valor de 5 se recupera como 0005.
Si especifica ZEROFILL para una columna numérica, MySQL agrega automáticamente el atributo UNSIGNED a la columna.
Los tipos de datos numéricos que permiten el atributo UNSIGNED también permiten SIGNED. Sin embargo, estos tipos de datos están firmados de forma predeterminada, por lo que el atributo FIRMADO no tiene ningún efecto.
La descripción anterior está tomada del sitio web oficial de MYSQL.
zerofill
no es estándar. " ElZEROFILL
atributo se ignora cuando una columna está involucrada en expresiones oUNION
consultas. Si almacena valores mayores que el ancho de visualización en una columna entera que tiene elZEROFILL
atributo, puede experimentar problemas cuando MySQL genera tablas temporales para algunas combinaciones complicadas. En estos casos , MySQL supone que los valores de datos se ajustan al ancho de visualización de la columna. "