MySQL中的int類型通常用于存儲整數值,其長度為4個字節或32位,可以存儲范圍為-2147483648到2147483647的值。但是,當向一個int類型的列中插入一個大于該范圍的值時,就會發生int溢出的問題。
// 創建一個表t,其中有一個int類型的列 CREATE TABLE t ( id INT(11) NOT NULL AUTO_INCREMENT, num INT(11) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; // 向表t中插入一條數據 INSERT INTO t (num) VALUES (2147483648); // 查詢表t中的數據 SELECT * FROM t;
上面的代碼在向表t中插入值為2147483648的數據時,由于該值已經超出了int類型的存儲范圍,MySQL會將其轉換為-2147483648存儲。因此,查詢表t時會發現實際存儲的值為-2147483648。
為了避免int溢出的問題,我們可以使用bigint類型來存儲更大的整數值。其長度為8個字節或64位,可以存儲范圍為-9223372036854775808到9223372036854775807的值。使用bigint類型的示例代碼如下:
// 創建一個表t,其中有一個bigint類型的列 CREATE TABLE t ( id INT(11) NOT NULL AUTO_INCREMENT, num BIGINT(20) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; // 向表t中插入一條數據 INSERT INTO t (num) VALUES (2147483648); // 查詢表t中的數據 SELECT * FROM t;
上面的代碼中,我們將表t中的num列類型改為bigint,并向其中插入值為2147483648的數據。查詢表t時可以發現,實際存儲的值為2147483648,避免了int溢出的問題。