MySQL中,int(10) 的 10 代表什么?
在 MySQL 中,我們定義int類型時(shí)需要設(shè)置長(zhǎng)度,比如INT(10),那么10 到底代表什么?如果超過(guò)這個(gè)范圍會(huì)出現(xiàn)什么問題?這篇文章我們來(lái)詳細(xì)地聊一聊。
含義
在數(shù)據(jù)類型如 INT 后面的括號(hào)中的數(shù)字(例如 INT(10))指定了顯示寬度,即當(dāng)使用 ZEROFILL 屬性時(shí),系統(tǒng)會(huì)在數(shù)值前補(bǔ)零以達(dá)到指定的寬度。
- 存儲(chǔ)空間:INT 數(shù)據(jù)類型總是占用 4 字節(jié)(32 位),無(wú)論顯示寬度是多少。
- 取值范圍:對(duì)于有符號(hào)的 INT,范圍是 -2147483648 到 2147483647;對(duì)于無(wú)符號(hào)的 INT UNSIGNED,范圍是 0 到 4294967295。顯示寬度不會(huì)改變這一范圍。
ZEROFILL 的應(yīng)用
當(dāng)在 INT 類型后使用 ZEROFILL 時(shí),MySQL 會(huì)在數(shù)值前補(bǔ)零,以符合指定的顯示寬度。如下示例:
CREATE TABLE users (
id INT(10) ZEROFILL,
name VARCHAR(50)
);
插入數(shù)據(jù):
INSERT INTO users (id, name) VALUES (123, 'Alice');
查詢結(jié)果:
+-----------+-------+
| id | name |
+-----------+-------+
| 0000000123 | Alice |
+-----------+-------+
在這個(gè)例子中,id 字段顯示為 0000000123,達(dá)到 10 位寬度。
MySQL 8.0.17 及以后的變化
從 MySQL 8.0.17 版本開始,整數(shù)類型的顯示寬度被廢棄(deprecated),即使指定了顯示寬度,默認(rèn)情況下也不再影響存儲(chǔ)或顯示。這意味著:
- 影響:不再推薦在整數(shù)類型后指定顯示寬度,如 INT(10) 中的 10 將被忽略,除非配合 ZEROFILL 使用。
- 推薦做法:直接使用 INT 而無(wú)需指定顯示寬度,除非確實(shí)需要與現(xiàn)有系統(tǒng)兼容或有特殊需求。
為了更好地理解INT,下面通過(guò)幾個(gè)例子詳細(xì)解釋。
創(chuàng)建表并插入數(shù)據(jù):
CREATE TABLE example (
id INT(10) NOT NULL,
name VARCHAR(50)
);
INSERT INTO example (id, name) VALUES (1, 'John'), (123456, 'Jane');
查詢顯示:
SELECT * FROM example;
結(jié)果:
+-------+-------+
| id | name |
+-------+-------+
| 1 | John |
| 123456 | Jane |
+-------+-------+
在沒有使用 ZEROFILL 的情況下,顯示寬度 10 并未影響輸出格式。
使用 ZEROFILL 的情況:
CREATE TABLE example_zf (
id INT(10) ZEROFILL NOT NULL,
name VARCHAR(50)
);
INSERT INTO example_zf (id, name) VALUES (1, 'John'), (123456, 'Jane');
SELECT * FROM example_zf;
結(jié)果:
+-----------+-------+
| id | name |
+-----------+-------+
| 0000000001 | John |
| 0000123456 | Jane |
+-----------+-------+
這里,id 字段根據(jù)顯示寬度 10 補(bǔ)充了前導(dǎo)零。
注意:由于 MySQL 8.0.17 及以后的版本中顯示寬度被廢棄,建議在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)避免依賴顯示寬度,除非有明確的需求和兼容性考慮。
總結(jié)
- INT(10) 中的 10 代表的是顯示寬度,它用于在與 ZEROFILL 一起使用時(shí)補(bǔ)充前導(dǎo)零。
- 不影響數(shù)值的存儲(chǔ)大小或取值范圍。
- 在 MySQL 8.0.17 及以后版本中,整數(shù)類型的顯示寬度被廢棄,建議不再使用這種方式指定寬度,除非有特定需求。