先了解一下兩者都代表什么意思
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 之間,而 unsigned 的取值范圍是 0-4294967295 之間。
- 默認的 int 類型,允許插入負數,unsigned 設置后,無法插入負數。