1. 程式人生 > >資料型別之【數值型別】的整數型 int

資料型別之【數值型別】的整數型 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)