MySQL中int(10)和int(11)的區(qū)別詳解
一、背景
在創(chuàng)建數據庫表的時候,我們經常會用到int(x)來定義一個字段的類型,一直誤以為這里的x表示存儲數字的長度。
其實大錯特錯,這里的 x 指的是 最大顯示寬度(最大有效顯示寬度是255),且顯示寬度與存儲大小或類型包含的值的范圍無關。
二、MySQL整數類型
| 類型 | 字節(jié) | 取值范圍 | 顯示寬度 |
|---|---|---|---|
| tinyint | 1 | -128 ~ 127 | 4 |
| smallint | 2 | -32768 ~ 32767 | 6 |
| mediumint | 3 | -8388608 ~ 8388607 | 9 |
| int | 4 | -2147483648 ~ 2147483647 | 11 |
| bigint | 8 | -9223372036854775808 ~ 9223372036854775807 | 20 |
MySQL 類型關鍵字后面的括號內指定整數值的顯示寬度(例如,INT(4))。
該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時從左側填滿寬度。顯示寬度并不限制可以在列內保存的值的范圍,也不限制超過列的指定寬度的值的顯示。
當結合可選擴展屬性 zerofill 使用時, 默認補充的空格用零代替。
例如,對于聲明為 INT(5) zerofill 的列,值 4 檢索為 00004。請注意如果在整數列保存超過顯示寬度的一個值,當 MySQL 為復雜聯接生成臨時表時會遇到問題,因為在這些情況下 MySQL 相信數據適合原列寬度。
所有整數類型可以有一個可選(非標準)屬性 UNSIGNED。當你想要在列內只允許非負數和該列需要較大的上限數值范圍時可以使用無符號值。
那取值范圍和顯示寬度到底有什么關系呢?利用 int 做了個實驗:
create table int_demo( ? ? id int not null auto_increment, ? ? int_4 int(4) UNSIGNED zerofill, ? ? int_8 int(8) UNSIGNED zerofill, ? ? primary key (id) ); insert into int_demo (int_4, int_8) VALUES (2, 1000),(123456, 1234567898); select * from int_demo;
查詢結果:
mysql> select * from int_demo; +----+--------+------------+ | id | int_4 ?| int_8 ? ? ?| +----+--------+------------+ | ?1 | ? 0002 | ? 00001000 | | ?3 | 123456 | 1234567898 | +----+--------+------------+ 2 rows in set (0.00 sec)
總結:
顯示寬度整數類型的取值范圍是無關的。
顯示寬度只是指明 mysql 最大可能顯示的數字個數,數值的位數小于指定的寬度時左側用數字 0 填充。
如果插入了大于顯示寬度的值,只要該值不超過該類型整數的取值范圍,數值依然可以插入,而且能夠顯示出來。
到此這篇關于MySQL中int(10)和int(11)的區(qū)別詳解的文章就介紹到這了,更多相關MySQL int(10)和int(11)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql/Java服務端對emoji的支持與問題解決方法詳解
這篇文章主要介紹了mysql/Java服務端對emoji的支持與問題解決方法,結合實例形式分析了mysql/Java服務端對emoji字符集存儲及支持問題解決方法,需要的朋友可以參考下2019-10-10
MySQL8.x登陸root用戶突然提示mysql_native_password的實現
本文主要介紹了MySQL 8.x登陸root用戶突然提示mysql_native_password,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08

