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)