数据类型之【数值类型】的整数型 mediumint

1.1 mediumint说明

1.2 mediumint实践

   1.2.1 环境准备

   1.2.2 加UNSIGNED参数

   1.2.3 加ZEROFILL参数

   1.2.4 不加UNSIGNED和ZEROFILL参数

1.3 mediumint总结

1.1 mediumint说明

类型

长度

不指定长度时长度为

占用字节

有符号

无符号

mediumint

8

9(实际长度还是8)

3(24bit)

-8388608~8388607

0~16777215

id      mediumint(M)  [UNSIGNED]  [ZEROFILL]

字段名 字段类型(长度)  [无符号]  [前导填充]

unsigned

01:mediumint(M)后面加上unsigned,就是无符号(mediumint的范围就是0~16777215)

02:mediumint(M)后面不加上unsigned,并且不加ZEROFILL参数,就是有符号(mediumint的范

围就是-8388608~8388607)

zerofill

01:进行前导零填充

02:mediumint(M)加上zerofile后,同时也会把unsigned参数也带上(mediumint范围0~16777215)

1.2 mediumint实践

1.2.1 环境准备

##创建chenliang

mysql> create database if not exists chenliang;

Query OK, 1 row affected (0.03 sec)


mysql> show databases like "chenliang";

+----------------------+

| Database (chenliang) |

+----------------------+

| chenliang            |

+----------------------+

1 row in set (0.03 sec)


##进入chenliang

mysql> use chenliang;

Database changed


mysql> select database();

+------------+

| database() |

+------------+

| chenliang  |

+------------+

1 row in set (0.01 sec)

1.2.2 加UNSIGNED参数

##创建test1测试表这里指定了UNSIGNED,也就是无符号

mysql> create table if not exists test1(

-> id mediumint(8) unsigned

-> );

Query OK, 0 rows affected (0.19 sec)


mysql> desc test1;

+-------+-----------------------+------+-----+---------+-------+

| Field | Type                  | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+-------+

| id    | mediumint(8) unsigned | YES  |     | NULL    |       |

+-------+-----------------------+------+-----+---------+-------+

1 row in set (0.10 sec)


**测试01:测试插入范围0~16777215的整数以及超过16777215的整数

mysql> insert into test1 values(0);

Query OK, 1 row affected (0.05 sec)

<=插入整数0,正确(没有超过范围0~16777215)


mysql> insert into test1 values(1600000);

Query OK, 1 row affected (0.04 sec)

<=插入数值1600000,正确(没有超过范围0~16777215)


mysql> insert into test1 values(16777216);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入数值16777216,错误(超出范围0~16777215)


mysql> select * from test1;

+---------+

| id      |

+---------+

| 0       |

| 1600000 |

+---------+

2 rows in set (0.01 sec)


**测试02:测试-1~-8388608范围的数据是否能够正常插入

mysql> insert into test1 values(-1);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入负数报错(因为建表时,id字段加了unsigned参数,mediumint的范围为0~16777215)


mysql> INSERT INTO test1 values(-128);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入负数报错(因为建表时,id字段加了unsigned参数,mediumint的范围为0~16777215)


mysql> insert into test1 values(-8388608);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

^==插入负数报错(因为建表时,在id字段加了unsigned参数,smllint的范围为0~16777215)


mysql> select * from test1;

+---------+

| id      |

+---------+

| 0       |

| 1600000 |

+---------+

2 rows in set (0.00 sec)

1.2.3 加ZEROFILL参数

##创建test2表,(这里指定了zerofill,也就是前导零填充

mysql> create table if not exists test2(

-> id mediumint(8) zerofill

-> );

Query OK, 0 rows affected (0.03 sec)


mysql> desc test2;

+-------+--------------------------------+------+-----+---------+-------+

| Field | Type                           | Null | Key | Default | Extra |

+-------+--------------------------------+------+-----+---------+-------+

| id    | mediumint(8) unsigned zerofill | YES  |     | NULL    |       |

+-------+--------------------------------+------+-----+---------+-------+

1 row in set (0.00 sec)

<=只指定unsigned,不会有zerofill

<=只指定zerofill时,会带上unsigned


**测试01:测试插入范围0~16777215的整数和超过16777215的整数

mysql> insert into test2 values(0);

Query OK, 1 row affected (0.04 sec)

<=插入整数0,在0~16777215范围内,正确


mysql> insert into test2 values(16777215);

Query OK, 1 row affected (0.04 sec)

<=插入整数16777215,在0~16777215范围内,正确


mysql> insert into test2 values(16777216);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入整数16777216,不在0~16777215范围内,错误


mysql> select * from test2;

+----------+

| id       |

+----------+

| 00000000 |

| 16777215 |

+----------+

2 rows in set (0.00 sec)


**测试02:测试-1~-8388608范围的数据是否能够正常插入

mysql> INSERT INTO test2 values(-1);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入负整数-1,错误(因为在id字段加了zerofill参数,它会把unsigned也带上,所以

id字段的范围为0~16777215)


mysql> INSERT INTO test2 values(-128);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入负整数-128,错误(因为在id字段加了zerofill参数,它会把unsigned也带上,所以

id字段的范围为0~16777215)


mysql> insert into test2 values(-8388608);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

^==插入负整数-8388608,错误(因为在id字段加了zerofill参数,它会把unsigned也带

上,所以id字段的范围为0~16777215,并且有符号的范围也只是-32768~32767)


mysql> select * from test2;

+----------+

| id       |

+----------+

| 00000000 |

| 16777215 |

+----------+

2 rows in set (0.00 sec)

1.2.4 不加UNSIGNED和ZEROFILL参数

##创建test3表(不加unsigned和zerofill

mysql> create table if not exists test3(

-> id mediumint(8)

-> );

Query OK, 0 rows affected (0.05 sec)


mysql> desc test3;

+-------+--------------+------+-----+---------+-------+

| Field | Type         | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id    | mediumint(8) | YES  |     | NULL    |       |

+-------+--------------+------+-----+---------+-------+

1 row in set (0.00 sec)


**测试01:测试插入整数0~8388607和超过8388607的整数

mysql> insert into test3 values(0);

Query OK, 1 row affected (0.00 sec)

<=插入整数0,正确(在范围-8388608~8388607范围内)


mysql> insert into test3 values(8388607);

Query OK, 1 row affected (0.08 sec)

<=插入整数8388607,正确(在范围-8388608~8388607范围内)


mysql> insert into test3 values(8388608);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入整数8388608,错误(不在范围-8388608~8388607范围内)


mysql> select * from test3;

+---------+

| id      |

+---------+

| 0       |

| 8388607 |

+---------+

2 rows in set (0.00 sec)


**测试02:测试插入负数-1~-8388608和小于-8388608的负数

mysql> INSERT INTO test3 values(-1);

Query OK, 1 row affected (0.10 sec)

<=插入负整数-1,正确(在范围-8388608~8388607范围内)


mysql> insert into test3 values(-8388608);

Query OK, 1 row affected (0.04 sec)

<=插入负整数-8388608,正确(在范围-8388608~8388607范围内)


mysql> insert into test3 values(-8388609);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

<=插入负整数-8388609,错误(不在范围-8388608~8388607范围内)


mysql> select * from test3;

+----------+

| id       |

+----------+

| 0        |

| 8388607  |

| -1       |

| -8388608 |

+----------+

4 rows in set (0.00 sec)

1.3 mediumint总结

格式:

id      mediumintM)   [UNSIGNED] [ZEROFILL]

字段名 字段类型(长度)  [无符号]  [前导填充]


unsigned

01:mediumint(M)后面加上unsigned后,就是无符号(mediumnt的范围就是0~16777215)

02:mediumint(M)后面不加上unsigned,并且不加zerofill参数,就是有符号(mediumint的范围就

   是-8388608~8388607)


zerofill

01:进行前导零填充(插入数值1,字段显示的是00000001,因为mediumint的长度为8)

02:mediumint(M)加上zerofile后,同时也会把unsigned参数也带上(mediumint的范围为

    0~16777215)

猜你喜欢

转载自blog.51cto.com/11576296/2337764