Qual è il vantaggio di zerofill in MySQL?

Voglio solo sapere qual è il vantaggio / utilizzo della definizione di ZEROFILL per INT DataType in MySQL ?

 `id` INT UNSIGNED ZEROFILL NOT NULL 

Quando si seleziona una colonna con tipo ZEROFILL, il valore visualizzato del campo viene misurato con zeri fino alla larghezza di visualizzazione specificata nella definizione della colonna. I valori più lunghi della larghezza del display non vengono troncati. Nota che l’uso di ZEROFILL implica anche UNSIGNED.

L’uso di ZEROFILL e una larghezza di visualizzazione non ha alcun effetto sul modo in cui i dati vengono archiviati. Colpisce solo come viene visualizzato.

Ecco alcuni esempi di SQL che dimostrano l’uso di 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; 

Risultato:

  xy 00000001 1 00000012 12 00000123 123 123456789 123456789 

Un esempio per capire, dove l’utilizzo di ZEROFILL potrebbe essere interessante:

In Germania, abbiamo codici postali a 5 cifre. Tuttavia, questi codici possono iniziare con uno zero, quindi 80337 è un codice postale valido per munic, 01067 è un codice postale di Berlino.

Come vedi, ogni cittadino tedesco si aspetta che i codici di avviamento postale vengano visualizzati come un codice a 5 cifre, quindi 1067 sembra strano.

Per memorizzare questi dati, è ansible utilizzare un ZEROFILL VARCHAR (5) o INT (5) mentre il numero intero con zerofilled presenta due grandi vantaggi:

  1. Lotto minore spazio di archiviazione sul disco rigido
  2. Se inserisci 1067, ottieni ancora 01067 indietro

Forse questo esempio aiuta a capire l’uso di ZEROFILL.

È una funzionalità per personalità disturbate a cui piacciono le scatole quadrate.

Inserisci

 1 23 123 

ma quando lo selezioni, riempie i valori

 000001 000023 000123 

Aiuta nell’ordinamento corretto nel caso in cui sia necessario concatenare questo “intero” con qualcos’altro (un altro numero o testo) che richiederà di essere ordinato come “testo” allora.

per esempio,

se è necessario utilizzare i numeri di campo intero (diciamo 5) concatenati come A-005 o 10/0005

So di essere in ritardo per la festa, ma trovo che lo zerofill sia utile per le rappresentazioni booleane di TINYINT (1). Null non significa sempre Falso, a volte non lo vuoi. Sfruttando il problema di un minuscolo, si converte in modo efficace quei valori in INT e si rimuove qualsiasi confusione che l’applicazione potrebbe avere sull’interazione. L’applicazione può quindi trattare tali valori in modo simile al tipo di dati primitivo 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) 

Se si specifica ZEROFILL per una colonna numerica, MySQL aggiunge automaticamente l’attributo UNSIGNED alla colonna.

I tipi di dati numerici che consentono l’attributo UNSIGNED consentono inoltre FIRMATO. Tuttavia, questi tipi di dati sono firmati per impostazione predefinita, quindi l’attributo SEGNALE non ha alcun effetto.

Sopra la descrizione è presa dal sito web ufficiale di MYSQL.

ZEROFILL

Ciò significa essenzialmente che se il valore intero 23 viene inserito in una colonna INT con la larghezza di 8, il resto della posizione disponibile verrà automaticamente riempito di zeri.

Quindi

 23 

diventa:

 00000023 

Se utilizzato in combinazione con l’attributo opzionale ZEROFILL (non standard), il riempimento predefinito degli spazi viene sostituito da zero. Ad esempio, per una colonna dichiarata come INT (4) ZEROFILL, viene recuperato un valore di 5 come 0005.

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