數據類型之【數值類型】的整數型 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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章