usar duro disco como mysql types unsigned-integer

duro - ¿Cuál es el beneficio de zerofill en MySQL?



zerofill disco duro (9)

Cuando se utiliza junto con el atributo opcional (no estándar) ZEROFILL, el relleno predeterminado de espacios se reemplaza por ceros. Por ejemplo, para una columna declarada como INT (4) ZEROFILL, se recupera un valor de 5 como 0005.

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

Solo quiero saber cuál es el beneficio / uso de definir ZEROFILL para INT DataType en MySQL .

`id` INT UNSIGNED ZEROFILL NOT NULL


Ayuda en la clasificación correcta en caso de que necesite concatenar este "entero" con otra cosa (otro número o texto) que requerirá que se ordene como un "texto".

por ejemplo,

si necesita utilizar los números de campo entero (digamos 5) concatenados como A-005 o 10/0005


Cuando selecciona una columna con el tipo ZEROFILL, rellena con ceros el valor mostrado del campo hasta el ancho de visualización especificado en la definición de la 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 de ZEROFILL y un ancho de visualización no tiene ningún efecto sobre cómo se almacenan los datos. Solo afecta 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


Es una característica para las personalidades perturbadas que les gustan las cajas cuadradas.

Usted inserta

1 23 123

pero cuando seleccionas, 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). Null no siempre significa False, a veces no lo quieres. Al actualizar una minúscula, está convirtiendo efectivamente esos valores a INT y eliminando cualquier confusión que pueda tener su aplicación al interactuar. Su aplicación puede tratar esos valores de manera similar al tipo de datos primitivo True = Not (0)


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 por defecto, por lo que el atributo SIGNED no tiene ningún efecto.

La descripción anterior está tomada del sitio web oficial de MYSQL.


Un ejemplo para entender, donde el uso de ZEROFILL podría estar intersting:

En Alemania, tenemos códigos postales de 5 dígitos. Sin embargo, esos códigos pueden comenzar con 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 1067 parece extraño.

Para almacenar esos datos, puede usar VARCHAR (5) o INT (5) ZEROFILL, mientras que el entero zerofilled tiene dos grandes ventajas:

  1. Mucho menos espacio de almacenamiento en el disco duro
  2. Si inserta 1067, aún obtiene 01067 de vuelta

Tal vez este ejemplo ayude a entender el uso de ZEROFILL.


ZEROFILL

Esto significa esencialmente que si el valor entero 23 se inserta en una columna INT con un ancho de 8, el resto de la posición disponible se rellenará automáticamente con ceros.

Por lo tanto

23

se convierte en:

00000023


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)