您好,登錄后才能下訂單哦!
最近在找工作所以一直在面試,在面試過程中暴露了自己很多不足的地方,一直在總結和歸納。可能大部分面試官對 mysql 的問題都會問數據庫優化啊、主從復制啊、索引啊、引擎啊等等之類的。那么使我印象最深的是 int (10) 和 int (11) 有什么區別。這好像是最基礎的問題了,我好像從來沒有在意過。當時有點兒懵逼,有什么區別?不知道!沒想過!
那么回到家以后,我趕緊復習了下 mysql 的數據類型相關知識。對整數類型做些說明。
mysql 中整數數據類型
數據類型 | 說明 | 存儲需求 |
---|---|---|
tinyint | 很小的整數 | 1 字節 |
smallint | 小的整數 | 2 字節 |
mediumint | 中等大小的整數 | 3 字節 |
int(integer) | 普通大小的整數 | 4 字節 |
bigint | 大整數 | 8 字節 |
不同類型的取值范圍
數據類型 | 有符號 | 無符號 |
---|---|---|
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 |
不同數據類型的默認顯示寬度
數據類型 | 默認顯示寬度 |
---|---|
tinyint | 4 |
smallint | 6 |
mediumint | 9 |
int(integer) | 11 |
bigint | 20 |
* 因為負號占了一個數字位,所以各類型的寬度是最大值數字位 + 1 位。例如 tinyint 的最大數字位是 3,加負號所以顯示寬度是 4。
那么取值范圍和顯示寬度到底有什么關系呢?我利用 tinyint 做了個實驗,首先創建一張表如下
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)
我分別創建了有符號 tinyint 類型的 test_id_1 顯示寬度為 1 和 test_id_2 顯示寬度為 4 兩字段,接下來插入數據,同時插入 - 128、1 和 127 這些數值,看看會怎么樣。
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)
查詢出來的結果也是一樣,經過以上實驗得到結論:
顯示寬度整數類型的取值范圍是無關的。顯示寬度只是指明 mysql 最大可能顯示的數字個數,數值的位數小于指定的寬度時就由空格填充,如果插入了大于顯示寬度的值,只要該值不超過該類型整數的取值范圍,數值依然可以插入,而且能夠顯示出來。
同理,所以 int (10) 和 int (11) 沒有任何區別,就是顯示寬度不同,小伙伴們千萬不要忘記了呀。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。