開發(fā)中不免會(huì)經(jīng)常建立數(shù)據(jù)庫(kù),這里經(jīng)常會(huì)設(shè)置字段為 int (10) 或 int (11) 有什么區(qū)別。但這兩者有什么區(qū)別呢,我好像從來沒有在意過。
于是趕緊復(fù)習(xí)了下 mysql 的數(shù)據(jù)類型相關(guān)知識(shí)。對(duì)整數(shù)類型做些說明。
mysql 中整數(shù)數(shù)據(jù)類型
數(shù)據(jù)類型 | 說明 | 存儲(chǔ)需求 |
---|---|---|
tinyint | 很小的整數(shù) | 1 字節(jié) |
smallint | 小的整數(shù) | 2 字節(jié) |
mediumint | 中等大小的整數(shù) | 3 字節(jié) |
int(integer) | 普通大小的整數(shù) | 4 字節(jié) |
bigint | 大整數(shù) | 8 字節(jié) |
不同類型的取值范圍
數(shù)據(jù)類型 | 有符號(hào) | 無符號(hào) |
---|---|---|
tinyint | -128~127 | 0~255 |
smallint | -32768~32767 | 0~65535 |
mediumint | -8388608~8388607 | 0~16777215 |
int(integer) | -2147483648~2147483647 | 0~4294967295 |
bigint | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
不同數(shù)據(jù)類型的默認(rèn)顯示寬度
數(shù)據(jù)類型 | 默認(rèn)顯示寬度 |
---|---|
tinyint | 4 |
smallint | 6 |
mediumint | 9 |
int(integer) | 11 |
bigint | 20 |
* 因?yàn)樨?fù)號(hào)占了一個(gè)數(shù)字位,所以各類型的寬度是最大值數(shù)字位 + 1 位。例如 tinyint 的最大數(shù)字位是 3,加負(fù)號(hào)所以顯示寬度是 4。
那么取值范圍和顯示寬度到底有什么關(guān)系呢?我利用 tinyint 做了個(gè)實(shí)驗(yàn),首先創(chuàng)建一張表如下
mysql> desc test_integer; +-----------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | test_id_1 | tinyint(1) | NO | | NULL | | | test_id_2 | tinyint(4) | NO | | NULL | | +-----------+------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
我分別創(chuàng)建了有符號(hào) tinyint 類型的 test_id_1 顯示寬度為 1 和 test_id_2 顯示寬度為 4 兩字段,接下來插入數(shù)據(jù),同時(shí)插入 - 128、1 和 127 這些數(shù)值,看看會(huì)怎么樣。
mysql> insert into test_integer (test_id_1,test_id_2) values (-128,-128), (1,1), (127,127); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
ok 提示插入成功,我們查詢一下
mysql> select * from test_integer; +----+-----------+-----------+ | id | test_id_1 | test_id_2 | +----+-----------+-----------+ | 1 | -128 | -128 | | 2 | 1 | 1 | | 3 | 127 | 127 | +----+-----------+-----------+ 3 rows in set (0.00 sec)
查詢出來的結(jié)果也是一樣,經(jīng)過以上實(shí)驗(yàn)得到結(jié)論:
顯示寬度整數(shù)類型的取值范圍是無關(guān)的。顯示寬度只是指明 mysql 最大可能顯示的數(shù)字個(gè)數(shù),數(shù)值的位數(shù)小于指定的寬度時(shí)就由空格填充,如果插入了大于顯示寬度的值,只要該值不超過該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來。
同理,所以 int (10) 和 int (11) 沒有任何區(qū)別,就是顯示寬度不同,小伙伴們千萬不要忘記了呀。
以上就是在 MySQL 中 int (10) 和 int (11) 的區(qū)別的詳細(xì)內(nèi)容,希望大家學(xué)習(xí)后能不斷進(jìn)步。