sql >> Base de Datos >  >> RDS >> Mysql

MySQL 8 ignorando longitudes enteras

Este es un cambio documentado en Notas de la versión de MySQL 8.0.19 :

La "longitud" de una columna de enteros no significa nada. Una columna de int(11) es lo mismo que int(2) o int(40) . Todos son un tipo de datos enteros de 32 bits de tamaño fijo. Admiten el mismo valor mínimo y máximo.

La "longitud" de las columnas enteras ha sido una característica confusa de MySQL durante años. Es solo una pista que afecta el ancho de la pantalla, no el almacenamiento o el rango de valores. Prácticamente, solo importa cuando usas el ZEROFILL opción.

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)

Por lo tanto, es bueno que la engañosa "longitud" del entero ahora esté obsoleta y eliminada. Ha causado confusión durante muchos años.