Per quanto riguarda i dati, tinyint(1)
, tinyint(2)
, tinyint(3)
ecc. sono tutti esattamente uguali. Sono tutti compresi tra -128 e 127 per SIGNED
o 0-255 per UNSIGNED
. Come hanno notato altre risposte, il numero tra parentesi è semplicemente un suggerimento sulla larghezza di visualizzazione.
Potresti notare, tuttavia, che le cose application=wise potrebbero sembrare diverse. Qui, tinyint(1)
può assumere un significato speciale. Ad esempio, Connector/J (connettore Java) tratta tinyint(1)
come valore booleano e, invece di restituire un risultato numerico all'applicazione, converte i valori in true
e false
. questo può essere modificato tramite tinyInt1isBit=false
parametro di connessione.
Un tinyint(1) può contenere numeri nell'intervallo da -128 a 127, poiché il tipo di dati è 8 bit (1 byte) - ovviamente un tinyint senza segno può contenere valori da 0 a 255.
Troncherà silenziosamente i valori fuori dall'intervallo:
mysql> create table a
-> (
-> ttt tinyint(1)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from a;
+------+
| ttt |
+------+
| 127 |
| -128 |
| 127 |
| -128 |
+------+
4 rows in set (0.00 sec)
mysql>
... a meno che non modifichi sql_mode
oppure cambia la configurazione del server:
mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>
Il valore utilizzato nel DDL per il tipo di dati (es:tinyint(1)) è, come sospettavi, la larghezza di visualizzazione. Tuttavia, è facoltativo e i client non devono utilizzarlo. Ad esempio, il client MySQL standard non lo utilizza.
https://dev.mysql .com/doc/refman/5.1/en/integer-types.html
https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html
MySql:Tinyint (2 ) vs tinyint(1) - qual è la differenza?