Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL 8 ignore les longueurs entières

Il s'agit d'un changement documenté dans le Notes de version de MySQL 8.0.19 :

La "longueur" d'une colonne entière ne veut rien dire. Une colonne de int(11) est identique à int(2) ou int(40) . Ce sont tous des types de données entiers 32 bits de taille fixe. Ils prennent en charge la même valeur minimale et maximale.

La "longueur" des colonnes d'entiers est une caractéristique déroutante de MySQL depuis des années. Ce n'est qu'un indice qui affecte la largeur d'affichage, pas le stockage ou la plage de valeurs. Pratiquement, cela n'a d'importance que lorsque vous utilisez le ZEROFILL option.

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)

C'est donc une bonne chose que l'entier trompeur "longueur" soit désormais obsolète et supprimé. Cela a semé la confusion pendant de nombreuses années.