mysql 整型数据类型

  mysql支持标准SQL中的数值类型,支持标准的整型类型INTEGER和SMALLINT,并且扩展了标准类型,也支持TINYINT、MEDIUMINT和BIGINT。下面的表格中是每个类型的存储范围。

mysql整型存储范围表

类型字节最小值最大值
TINYINT1-128127
SMALLINT2-2376832767
MEDIUMINT3-83886088388607
INTEGER4-21474836482147483647
BIGINT8-9223372036854775808

9223372036854775807

    在整数类型中,按照存储范围和存储方式,共分为5个类型,如果超出类型范围的操作会发生Out of range提示。比如下面的例子:我们建一个tInt表:字段为id1,id2,id3,分别为他们插入数据值1000,1000,1000。我们可以查看运行之后的结果:

mysql> create table tInt(
    -> id1 TINYINT,
    -> id2 SMALLINT,
    -> id3 INTEGER
    -> );
Query OK, 0 rows affected (0.12 sec)

mysql> insert into tInt values(1000,1000,1000);
ERROR 1264 (22003): Out of range value for column 'id1' at row 1

    除此之外mysql还支持在类型名称的小括号内指定显示宽度,比如INTEGER(5)表示数值宽度小于5的时候在数字前面填满宽度,如果不指定显示宽度默认为INTEGER(11)。一般配合zerofill,用0填充。如下面的例子:创建表tInt1,字段为id1和id2,并且都插入数据1。

mysql> create table tInt1(
    -> id1 INTEGER(5),
    -> id2 INTEGER
    -> );
Query OK, 0 rows affected (0.04 sec)

mysql> 
mysql> insert into tInt1 values(1,1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tInt1;
+------+------+
| id1  | id2  |
+------+------+
|    1 |    1 |
+------+------+
1 row in set (0.00 sec)

  我们可以看到插入的数据并没有任何异常,并且没有使用0填充,那是因为我们没有声明使用zerofill。下面我们修改表tInt1的字段。

mysql> alter table tInt1 modify id1 int zerofill;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> alter table tInt1 modify id2 int(5) zerofill;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from tInt1;
+------------+-------+
| id1        | id2   |
+------------+-------+
| 0000000001 | 00001 |
+------------+-------+
1 row in set (0.00 sec)

    我们可以看到不足的位数都是用0进行填充,那么,我们设置了宽度的限制,如果我们插入的数值超过了宽度的限制,会发生什么,会不会报错?我们继续对tInt1表进行操作,插入id1为1,id2为1111111我们可以看下面的代码。

mysql> insert into tInt1 values(1,1111111);
Query OK, 1 row affected (0.01 sec)

mysql> select * from tInt1;
+------------+---------+
| id1        | id2     |
+------------+---------+
| 0000000001 |   00001 |
| 0000000001 | 1111111 |
+------------+---------+
2 rows in set (0.00 sec)

    我们可以看到并没有报错,所以虽然我们生明了宽度,但实际值并没有受宽度的限制。

    所有整型类型都有一个可选的unsigned属性,如果声明此属性,则值最小为0,最大为原值的2倍。如果一个列生命为zerofill,则自动为该列添加unsigned属性。可看下面的案例。

mysql> create table tInt2(
    -> id1 TINYINT,
    -> id2 TINYINT UNSIGNED,
    -> id3 TINYINT ZEROFILL
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> 
mysql> insert into tInt2 values(-33,255,255);
Query OK, 1 row affected (0.01 sec)

mysql> 
mysql> select * from tInt2;
+------+------+------+
| id1  | id2  | id3  |
+------+------+------+
|  -33 |  255 |  255 |
+------+------+------+
1 row in set (0.00 sec)

另外整数类型还有一个 AUTO_INCREMENT属性,自动增长,后面会做详细的介绍。

转载于:https://my.oschina.net/jettyWang/blog/786927

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值