最近在找工作所以一直在面試,在面試過程中暴露了自己很多不足的地方,一直在總結和歸納。可能大部分面試官對 mysql 的問題都會問資料庫優化啊、主從複製啊、索引啊、引擎啊等等之類的。那麼讓我印象最深刻的是 int (10) 和 int (11) 有什麼不同。這好像是最基礎的問題了,我好像從來沒有在意過。當時有點兒懵逼,有什麼差別?不知道!沒想過!
那麼回到家以後,我趕緊複習了下 mysql 的資料型態相關知識。對整數類型做些說明。
mysql 中整數資料類型
資料類型 | ##說明儲存需求 | |
---|---|---|
很小的整數 | 1 位元組 | |
##小的整數 | 2 位元組 | |
中等大小的整數 | 3 位元組 | |
普通大小的整數 | 4 位元組 | |
大整數 | 8 位元組 |
無符號 | ||
---|---|---|
0~ 255 | smallint | |
0~65535 | #mediumint | |
0~16777215 | int(integer) | |
##-2147483648~2147483647 | #-2142949672954967 | |
-9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
預設顯示寬度 | |
---|---|
smallint | |
#mediumint | |
int(integer) | |
#bigint | |
* 因為負號佔了一個數字位,所以各類型的寬度是最大值數字位1 位。例如 tinyint 的最大數字位元是 3,加負號所以顯示寬度是 4。 |
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) 沒有任何差別,就是顯示寬度不同,小夥伴們千萬不要忘記了呀。
推薦教學:《
PHP教學》
以上是在 MySQL 中 int (10) 和 int (11) 的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!