在MySQL中创建整型字段INT(或其它像TINYINT)时,可以设定该字段的长度,如:
CREATE TABLE t1(id1 INT,id2 INT(5));
查看表结构信息:
mysql> DESC t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id1 | int(11) | YES | | NULL | |
| id2 | int(5) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
如果不指定长度,INT型默认长度为11。如果往该字段插入长度大于设定长度的数据,结果会怎样?MySQL会不会截断或者插不进去呢?
现往该表插入长度为7个1的值:
mysql> INSERT INTO t1(id1,id2) VALUES(1111111,1111111);
查看结果如下:
mysql> SELECT * FROM t1;
+---------+---------+
| id1 | id2 |
+---------+---------+
| 1 | 1 |
| 1111111 | 1111111 |
+---------+---------+
2 rows in set (0.00 sec)
得出结论,MySQL插入成功,不会截断,还是按照类型的实际精度进行保存。
整型字段有个ZEROFILL属性,在数字长度不够的数据前面填充0,以达到设定的长度,下面给上面的两个字段id1和id2分别设置该属性:
ALTER TABLE t1 MODIFY id1 INT ZEROFILL;
ALTER TABLE t1 MODIFY id2 INT(5) ZEROFILL;
mysql> DESC t1;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id1 | int(10) unsigned zerofill | YES | | NULL | |
| id2 | int(5) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
再往t1表插入两个长度为1的数据,如下:
mysql> INSERT INTO t1(id1,id2) VALUES(1,1);
查看结果如下:
mysql> SELECT * FROM t1;
+------------+---------+
| id1 | id2 |
+------------+---------+
| 0000000001 | 00001 |
| 0001111111 | 1111111 |
+------------+---------+
加上ZEROFILL属性后,MySQL会在数据前面补0以达到设置的长度。
0
顶
1
踩
分享到:
2011-10-21 08:04
浏览 17592
分类:数据库
评论