sql >> Database >  >> RDS >> Mysql

MySQL 8 negeert gehele lengtes

Dit is een wijziging gedocumenteerd in de MySQL 8.0.19 release-opmerkingen :

De "lengte" van een integerkolom betekent niets. Een kolom van int(11) is hetzelfde als int(2) of int(40) . Ze zijn allemaal een 32-bits integer gegevenstype met een vaste grootte. Ze ondersteunen dezelfde minimum- en maximumwaarde.

De "lengte" van integerkolommen is al jaren een verwarrend kenmerk van MySQL. Het is slechts een hint die van invloed is op de weergavebreedte, niet op de opslag of het bereik van waarden. In de praktijk maakt het alleen uit wanneer u de ZEROFILL . gebruikt optie.

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)

Het is dus een goede zaak dat het misleidende gehele getal "lengte" nu is verouderd en verwijderd. Het zorgt al jaren voor verwarring.



  1. DATEADD-equivalent in PostgreSQL

  2. Zeer eenvoudige gebruikersinvoer in django

  3. MySQL Connector voegt de enum toe met de waarde één minder dan de werkelijke

  4. Kan geen Chinees karakter invoegen in MySQL