Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL 8 ignorando comprimentos inteiros


Esta é uma mudança documentada no Notas de versão do MySQL 8.0.19 :

O "comprimento" de uma coluna inteira não significa nada. Uma coluna de int(11) é o mesmo que int(2) ou int(40) . Eles são todos um tipo de dados inteiro de 32 bits de tamanho fixo. Eles suportam o mesmo valor mínimo e máximo.

O "comprimento" de colunas inteiras tem sido um recurso confuso do MySQL por anos. É apenas uma dica que afeta a largura da tela, não o armazenamento ou o intervalo de valores. Praticamente, só importa quando você usa o ZEROFILL opção.
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)

Portanto, é bom que o "comprimento" do inteiro enganoso agora esteja obsoleto e removido. Isso tem causado confusão por muitos anos.