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

MySQL 8 ignora le lunghezze intere

Questa è una modifica documentata in Note sulla versione di MySQL 8.0.19 :

La "lunghezza" di una colonna intera non significa nulla. Una colonna di int(11) è lo stesso di int(2) o int(40) . Sono tutti un tipo di dati intero a 32 bit a dimensione fissa. Supportano lo stesso valore minimo e massimo.

La "lunghezza" delle colonne intere è stata per anni una caratteristica confusa di MySQL. È solo un suggerimento che influisce sulla larghezza di visualizzazione, non sull'archiviazione o sull'intervallo di valori. In pratica, conta solo quando usi ZEROFILL opzione.

mysql> create table t ( i1 int(6) zerofill, i2 int(12) zerofill );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t set i1 = 123, i2 = 123;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+--------+--------------+
| i1     | i2           |
+--------+--------------+
| 000123 | 000000000123 |
+--------+--------------+
1 row in set (0.00 sec)

Quindi è positivo che l'intero fuorviante "lunghezza" sia ora deprecato e rimosso. Ha causato confusione per molti anni.