sql >> Databasteknik >  >> RDS >> Mysql

MySQL 8 ignorerar heltalslängder

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.



  1. MySQL-fel 1022 vid skapande av tabell

  2. Finns det sätt att matcha IP med IP+CIDR ​​direkt från SELECT-frågan?

  3. Hur aktiverar jag MySQL-klienten automatiskt återansluta med MySQLdb?

  4. Hur använder jag lösenordshashning med PDO för att göra min kod säkrare?