在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以达到设置的长度。

zerofill,字面上理解就是填充0.在MySQL列中使用zerofill,如插入int(4),你插入1,显示0001,你插入55555,显示也是55555,插入负数显示为0000,因为mysql自动增加UNSIGNED属性 UNSIGNED不能为负数,当你插入负数时就显示0。

`pay_type` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000' COMMENT '支付方式:1卷皮系统 2支付宝 3银联 4财付通 ……'