1. 程式人生 > 實用技巧 >MySql:int(10) 與 int unsigned 之前的區別

MySql:int(10) 與 int unsigned 之前的區別

先了解一下兩者都代表什麼意思

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`)
)
  1. 向 test-in 表中插入資料。
insert into `test-in` values(2147483647);
insert into `test-in` values(-2147483648);
  1. 查看錶中資料。

  2. 嘗試一下,在這兩個區間之外進行插入資料,是否可以成功插入。

  1. 上面圖中可以看到兩條 Sql 均都報出異常,插入的值超出了範圍,沒辦法進行插入資料,只能在 int 範圍區間內進行資料插入。

建立 test-un 演示 int unsigned

CREATE TABLE `test-un` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)
  1. 建立後查詢一下 sql

在 sql 語句中,我並沒有指定 int 型別的位元組長度,執行完 sql 以後,unsigned 會預設設定 int 位元組長度為 10。

  1. 上述中說過使用 unsigned 屬性是沒辦法向表中插入負數的,這裡嘗試一下

可以看到圖中提示插入的值超出了範圍,由於 unsigned 屬性的限制,我們沒有辦法插入負數。

  1. 測試超過 int 預設的整數最大值插入

上圖中插入成功了,說明在使用 unsigned 屬性時,將預設 int 型別的取值範圍調整了。

  1. 調整後的 int 取值範圍

intMaxValue = 2147483648 + 2147483647 = 4294967295

  1. 測試一下是否真的可以插入 4294967295 到資料庫中

答案是可以的。

區別總結

  1. 預設的 int 型別,取值範圍是 -2147483648-2147483647
    之間,而 unsigned 的取值範圍是 0-4294967295 之間。
  2. 預設的 int 型別,允許插入負數,unsigned 設定後,無法插入負數。