MySql:int(10) 與 int unsigned 之前的區別
阿新 • • 發佈:2020-07-20
先了解一下兩者都代表什麼意思
int(10)
給 int 型別設定位元組長度為 10,int 型別預設的值範圍大小是:-2147483648和2147483647。
unsigned
設定 int 型別不能為負數。
建立 MySql 表進行演示
建立 test-in 演示 int(10)
CREATE TABLE `test-in` (
`id` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
- 向 test-in 表中插入資料。
insert into `test-in` values(2147483647); insert into `test-in` values(-2147483648);
-
查看錶中資料。
-
嘗試一下,在這兩個區間之外進行插入資料,是否可以成功插入。
- 上面圖中可以看到兩條 Sql 均都報出異常,插入的值超出了範圍,沒辦法進行插入資料,只能在 int 範圍區間內進行資料插入。
建立 test-un 演示 int unsigned
CREATE TABLE `test-un` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
- 建立後查詢一下 sql
在 sql 語句中,我並沒有指定 int 型別的位元組長度,執行完 sql 以後,unsigned 會預設設定 int 位元組長度為 10。
- 上述中說過使用 unsigned 屬性是沒辦法向表中插入負數的,這裡嘗試一下
可以看到圖中提示插入的值超出了範圍,由於 unsigned 屬性的限制,我們沒有辦法插入負數。
- 測試超過 int 預設的整數最大值插入
上圖中插入成功了,說明在使用 unsigned 屬性時,將預設 int 型別的取值範圍調整了。
- 調整後的 int 取值範圍
intMaxValue = 2147483648 + 2147483647 = 4294967295
- 測試一下是否真的可以插入 4294967295 到資料庫中
答案是可以的。
區別總結
- 預設的 int 型別,取值範圍是 -2147483648-2147483647
- 預設的 int 型別,允許插入負數,unsigned 設定後,無法插入負數。