问题
I'm a little bit confused on datatypes length in MySql; I read the reference manual at http://dev.mysql.com/doc/refman/5.0/en/data-types.html and I know that when I write "INT(M)"...
M indicates the maximum display width for integer types. For floating-point and fixed-point types, M is the total number of digits that can be stored. For string types, M is the maximum length. The maximum permissible value of M depends on the data type.
Then, I added a column to my table with a field datatype like INT(10) [not unsigned] and I know that the maximum values are -2147483648 / 2147483647
However if I edit it to INT(11), MySQL permit me to set a larger length without any error although the length is out of the range; in this case, I'll get an error only when I set a value larger of 2147483647, why not before?
Thank You in advance,
Max
回答1:
The M
value doesn't affect the range of numbers you can store. You can save the same numbers in INT(1)
as in INT(30)
. The number does only affect the ZEROFILL behavior.
mysql> CREATE TEMPORARY TABLE foobar(x INT(40) ZEROFILL);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO foobar(x) VALUES (42);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM foobar;
+------------------------------------------+
| x |
+------------------------------------------+
| 0000000000000000000000000000000000000042 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql>
回答2:
I can only speculate, but my guess is that the display width setting just isn't smart enough to recognize the conflict. But seeing as the display width is just a recommendation for client programs anyway, I would argue it doesn't have to be.
来源:https://stackoverflow.com/questions/4431856/why-i-dont-get-an-error-setting-larger-int-datatype-length-in-mysql