INT(3)列不会剪切值到适当的长度,并允许插入完整的值 - MySQL
INT(3)列没有将值裁剪为适当的长度,并允许完整的值被插入的原因是,INT(3)中的数字3并不是限制存储值的长度,而是指定了显示宽度。在MySQL中,INT数据类型的大小表示显示宽度,而不是存储大小。因此,如果指定的显示宽度大于实际值的位数,将会在左侧填充0以满足指定宽度的要求。这就是ZEROFILL的作用。
解决方法是根据需要调整列的数据类型和显示宽度。可以使用ALTER TABLE语句修改表结构,通过更改列的数据类型和显示宽度来解决问题。如果不需要ZEROFILL功能,可以将列的数据类型更改为INT(1),这样就不会填充0了。如果需要ZEROFILL功能并且要限制显示宽度,可以将列的数据类型更改为INT(4) zerofill,并在显示宽度之前使用0填充。
以下是解决问题的示例代码:
-- 创建表并插入数据 CREATE TABLE a (a TINYINT); INSERT INTO a VALUES (100); -- 修改列的数据类型和显示宽度 ALTER TABLE a CHANGE a a TINYINT(1); -- 查询结果 SELECT * FROM a;
-- 创建表并插入数据 CREATE TABLE b (b INT(4)); INSERT INTO b VALUES (10000); -- 修改列的数据类型和显示宽度 ALTER TABLE b CHANGE b b INT(11) ZEROFILL; -- 查询结果 SELECT * FROM b;
通过以上步骤,可以解决INT(3)列不裁剪值的问题,并根据需要设置适当的数据类型和显示宽度。
MySQL中的INT(3)列没有剪切值的长度并允许完整值插入的问题是由于INT(3)的显示宽度属性不限制整数的容量,它仅仅在右侧填充零。实际上,它可以存储从零开始的整数,最大值为4294967295。
解决方法是使用display width属性不会影响数据存储的方式,它只影响数据的显示。
示例代码如下:
CREATE TABLE tableName ( x INT(3) ZEROFILL NOT NULL, y INT NOT NULL ); INSERT INTO tableName (x,y) VALUES (1, 1), (12, 12); SELECT x, y FROM tableName;
结果如下:
x y 001 1 012 12
更多详情请参考MySQL官方文档中的[Integer Types (Exact Value)](http://dev.mysql.com/doc/refman/5.0/en/integer-types.html)章节。