Detta är en ändring som dokumenterats i MySQL 8.0.19 release notes :
"Längden" på en heltalskolumn betyder ingenting. En kolumn med int(11)
är samma som int(2)
eller int(40)
. De är alla av en 32-bitars heltalsdatatyp med fast storlek. De stöder samma lägsta och högsta värde.
"Längden" på heltalskolumner har varit ett förvirrande inslag i MySQL i flera år. Det är bara en ledtråd som påverkar visningsbredden, inte lagringen eller värdeintervallet. I praktiken spelar det bara roll när du använder ZEROFILL
alternativ.
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)
Så det är bra att det missvisande heltal "längd" nu är utfasad och borttagen. Det har skapat förvirring i många år.