Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il significato del parametro TINYINT(parametro)?

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?