Conoscevo booleano in mysql come tinyint (1)
.
Oggi vedo una tabella con un intero definito come tinyint(2)
, e anche altri come int(4)
, int(6)
...
Che cosa significa la dimensione nel campo di tipo intero e tinyint?
Conoscevo booleano in mysql come tinyint (1)
.
Oggi vedo una tabella con un intero definito come tinyint(2)
, e anche altri come int(4)
, int(6)
...
Che cosa significa la dimensione nel campo di tipo intero e tinyint?
Risposte:
Significa larghezza di visualizzazione
Sia che usi tinyint (1) o tinyint (2), non fa alcuna differenza.
Uso sempre tinyint (1) e int (11), ho usato diversi client mysql (navicat, sequel pro).
Non significa assolutamente niente! Ho eseguito un test, tutti i client di cui sopra o anche il client della riga di comando sembra ignorarlo.
Tuttavia, la larghezza di visualizzazione è molto importante se si utilizza l' ZEROFILL
opzione, ad esempio la tabella ha le seguenti 2 colonne:
Un piccolo zerofill (2)
B tinyint (4) zerofill
entrambe le colonne hanno il valore di 1, l'output per la colonna A sarebbe 01
e 0001
per B , come mostrato nello screenshot qui sotto :)
Il (m)
indica la larghezza di visualizzazione della colonna; applicazioni come il client MySQL ne fanno uso quando mostrano i risultati della query.
Per esempio:
| v | a | b | c |
+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 |
| 10 | 10 | 10 | 10 |
| 100 | 100 | 100 | 100 |
Qui a
, b
e c
stanno usando TINYINT(1)
, TINYINT(2)
e TINYINT(3)
rispettivamente. Come puoi vedere, riempie i valori sul lato sinistro usando la larghezza del display.
È importante notare che non influisce sull'intervallo di valori accettato per quel particolare tipo, ovvero TINYINT(1)
accetta comunque [-128 .. 127]
.
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)
Informazioni su INT, TINYINT ... Questi sono diversi tipi di dati, INT è un numero di 4 byte, TINYINT è un numero di 1 byte. Maggiori informazioni qui - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .
La sintassi del tipo di dati TINYINT è TINYINT (M), dove M indica la larghezza massima di visualizzazione (utilizzata solo se il client MySQL lo supporta).