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)