資料型別之【數值型別】的整數型 int
目錄
1.1 int說明
1.2 int實踐
1.2.1 環境準備
1.2.2 加UNSIGNED引數
1.2.3 加ZEROFILL引數
1.2.4 不加UNSIGNED和ZEROFILL引數
1.3 int總結
1.1 int說明
型別 |
長度 |
不指定長度時長度為 |
佔用位元組 |
有符號 |
無符號 |
int |
10 |
11(實際長度還是10位) |
4(32bit) |
-2147483648~2147483647 |
0~4294967295 |
id int(M) [UNSIGNED] [ZEROFILL]
欄位名 欄位型別(長度) [無符號] [前導填充]
unsigned:
01:int(M)後面加上unsigned,就是無符號(int的範圍就是0~4294967295)
02:int(M)後面不加上unsigned,並且不加ZEROFILL引數,就是有符號(int的範圍就是
-2147483648~2147483647)
zerofill:
01:進行前導零填充
02:int(M)加上zerofile後,同時也會把unsigned引數也帶上(int範圍0~4294967295)
1.2 int實踐
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 int(10) unsigned
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc test1;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
**測試01:測試插入範圍0~4294967295的整數以及超過4294967295的整數
mysql> insert into test1 values(0);
Query OK, 1 row affected (0.05 sec)
<=插入整數0,正確(沒有超過範圍0~4294967295)
mysql> insert into test1 values(4294967295);
Query OK, 1 row affected (0.01 sec)
<=插入數值4294967295,正確(沒有超過範圍0~4294967295)
mysql> insert into test1 values(4294967296);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入數值4294967296,錯誤(超出範圍0~4294967295)
mysql> select * from test1;
+------------+
| id |
+------------+
| 0 |
| 4294967295 |
+------------+
2 rows in set (0.00 sec)
**測試02:測試-1~-2147483648範圍的資料是否能夠正常插入
mysql> insert into test1 values(-1);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入負數報錯(因為建表時,id欄位加了unsigned引數,int的範圍為0~4294967295)
mysql> insert into test1 values(-2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
^==插入負數報錯(因為建表時,在id欄位加了unsigned引數,int的範圍為0~4294967295)
mysql> select * from test1;
+------------+
| id |
+------------+
| 0 |
| 4294967295 |
+------------+
2 rows in set (0.00 sec)
1.2.3 加ZEROFILL引數
##建立test2表,(這裡指定了zerofill,也就是前導零填充)
mysql> create table if not exists test2(
-> id int(10) zerofill
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> desc test2;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id | int(10) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
1 row in set (0.03 sec)
<=只指定unsigned,不會有zerofill
<=只指定zerofill時,會帶上unsigned
**測試01:測試插入範圍0~4294967295的整數和超過4294967295的整數
mysql> insert into test2 values(0);
Query OK, 1 row affected (0.04 sec)
<=插入整數0,在0~4294967295範圍內,正確
mysql> insert into test2 values(4294967295);
Query OK, 1 row affected (0.02 sec)
<=插入整數4294967295,在0~4294967295範圍內,正確
mysql> insert into test2 values(4294967296);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入整數4294967296,不在0~4294967295範圍內,錯誤
mysql> select * from test2;
+------------+
| id |
+------------+
| 0000000000 |
| 4294967295 |
+------------+
2 rows in set (0.02 sec)
**測試02:測試-1~-2147483648圍的資料是否能夠正常插入
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~4294967295)
mysql> insert into test2 values(-2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入負整數-2147483648,錯誤(因為在id欄位加了zerofill引數,它會把unsigned也帶
上,所以id欄位的範圍為0~4294967295)
mysql> select * from test2;
+------------+
| id |
+------------+
| 0000000000 |
| 4294967295 |
+------------+
2 rows in set (0.03 sec)
1.2.4 不加UNSIGNED和ZEROFILL引數
##建立test3表(不加unsigned和zerofill)
mysql> create table if not exists test3(
-> id int(10)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc test3;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)1 row in set (0.01 sec)
**測試01:測試插入整數0~4294967295和超過4294967295的整數
mysql> insert into test3 values(0);
Query OK, 1 row affected (0.00 sec)
<=插入整數0,正確(在範圍-2147483648~2147483647範圍內)
mysql> insert into test3 values(2147483647);
Query OK, 1 row affected (0.02 sec)
<=插入整數2147483647,正確(在範圍-2147483648~2147483647範圍內)
mysql> insert into test3 values(2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入整數2147483648,錯誤(不在範圍-2147483648~2147483647範圍內)
mysql> select * from test3;
+------------+
| id |
+------------+
| 0 |
| 2147483647 |
+------------+
2 rows in set (0.00 sec)
**測試02:測試插入負數-1~-2147483648和小於--2147483648的負數
mysql> INSERT INTO test3 values(-1);
Query OK, 1 row affected (0.10 sec)
<=插入負整數-1,正確(在範圍-2147483648~2147483647範圍內)
mysql> insert into test3 values(-2147483648);
Query OK, 1 row affected (0.00 sec)
<=插入負整數-2147483648,正確(在範圍-2147483648~2147483647範圍內)
mysql> insert into test3 values(-2147483649);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
<=插入負整數-2147483649,錯誤(不在範圍-2147483648~2147483647範圍內)
mysql> select * from test3;
+-------------+
| id |
+-------------+
| 0 |
| 2147483647 |
| -1 |
| -2147483648 |
+-------------+
4 rows in set (0.00 sec)
1.3 int總結
格式:
id int(M) [UNSIGNED] [ZEROFILL]
欄位名 欄位型別(長度) [無符號] [前導填充]
unsigned:
01:int(M)後面加上unsigned後,就是無符號(int的範圍就是0~4294967295)
02:int(M)後面不加上unsigned,並且不加zerofill引數,就是有符號(int的範圍就
是-2147483648~2147483647)
zerofill:
01:進行前導零填充(插入數值1,欄位顯示的是0000000001,因為int的長度為10)
02:int(M)加上zerofile後,同時也會把unsigned引數也帶上(int的範圍為0~4294967295)