Voglio solo sapere qual è il vantaggio / utilizzo della definizione ZEROFILL
di INT
DataType MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Voglio solo sapere qual è il vantaggio / utilizzo della definizione ZEROFILL
di INT
DataType MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Risposte:
Quando si seleziona una colonna con tipo ZEROFILL
, il valore visualizzato del campo viene riempito con zeri fino alla larghezza di visualizzazione specificata nella definizione della colonna. I valori più lunghi della larghezza del display non vengono troncati. Si noti che l'utilizzo di ZEROFILL
implica anche UNSIGNED
.
L'uso ZEROFILL
e la larghezza di visualizzazione non influiscono sul modo in cui i dati vengono archiviati. Influisce solo su 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:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
Un esempio per capire, dove l'uso 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 la tunica, 01067
è un codice postale di Berlino.
Come vedi, qualsiasi cittadino tedesco si aspetta che i codici postali vengano visualizzati come un codice di 5 cifre, quindi 1067
sembra strano.
Per archiviare questi dati, è possibile utilizzare un VARCHAR(5)
o INT(5) ZEROFILL
mentre l'intero zerofilled presenta due grandi vantaggi:
1067
, si 01067
torna ancora indietroForse questo esempio aiuta a capire l'uso di ZEROFILL
.
È una caratteristica per le personalità disturbate che amano le scatole quadrate.
Si inserisce
1
23
123
ma quando lo selezioni, riempie i valori
000001
000023
000123
Aiuta nel corretto ordinamento nel caso in cui sia necessario concatenare questo "numero intero" con qualcos'altro (un altro numero o testo) che dovrà essere ordinato come "testo".
per esempio,
se è necessario utilizzare i numeri dei campi interi (diciamo 5) concatenati come A-005 o 10/0005
So di essere in ritardo alla festa ma trovo che zerofill sia utile per le rappresentazioni booleane di TINYINT (1). Null non significa sempre False, a volte non lo vuoi. Zerofillando un minuscolo, stai effettivamente convertendo quei valori in INT e rimuovendo qualsiasi confusione che l'applicazione potrebbe avere durante l'interazione. L'applicazione può quindi trattare tali valori in modo simile al tipo di dati primitivo True = Not (0)
666
quindi preferirei mantenere questa risposta così com'è;-)
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 utilizzato insieme all'attributo opzionale (non standard) ZEROFILL, il riempimento predefinito degli spazi viene sostituito con zeri. Ad esempio, per una colonna dichiarata come INT (4) ZEROFILL, un valore di 5 viene recuperato come 0005.
Se si specifica ZEROFILL per una colonna numerica, MySQL aggiunge automaticamente l'attributo UNSIGNED alla colonna.
Anche i tipi di dati numerici che consentono l'attributo UNSIGNED consentono SIGNED. Tuttavia, questi tipi di dati sono firmati per impostazione predefinita, quindi l'attributo SIGNED non ha alcun effetto.
La descrizione sopra è tratta dal sito ufficiale di MYSQL.
zerofill
non è standard. " L'ZEROFILL
attributo viene ignorato quando una colonna è coinvolta in espressioni oUNION
query. Se si memorizzano valori maggiori della larghezza di visualizzazione in una colonna intera che ha l'ZEROFILL
attributo, è possibile che si verifichino problemi quando MySQL genera tabelle temporanee per alcuni join complicati. In questi casi , MySQL presuppone che i valori dei dati rientrino nella larghezza di visualizzazione della colonna. "