MySQL中int(10)和int(11)的區(qū)別詳解
一、背景
在創(chuàng)建數(shù)據(jù)庫表的時(shí)候,我們經(jīng)常會(huì)用到int(x)來定義一個(gè)字段的類型,一直誤以為這里的x表示存儲(chǔ)數(shù)字的長度。
其實(shí)大錯(cuò)特錯(cuò),這里的 x 指的是 最大顯示寬度(最大有效顯示寬度是255),且顯示寬度與存儲(chǔ)大小或類型包含的值的范圍無關(guān)。
二、MySQL整數(shù)類型
| 類型 | 字節(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 類型關(guān)鍵字后面的括號(hào)內(nèi)指定整數(shù)值的顯示寬度(例如,INT(4))。
該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時(shí)從左側(cè)填滿寬度。顯示寬度并不限制可以在列內(nèi)保存的值的范圍,也不限制超過列的指定寬度的值的顯示。
當(dāng)結(jié)合可選擴(kuò)展屬性 zerofill 使用時(shí), 默認(rèn)補(bǔ)充的空格用零代替。
例如,對(duì)于聲明為 INT(5) zerofill 的列,值 4 檢索為 00004。請(qǐng)注意如果在整數(shù)列保存超過顯示寬度的一個(gè)值,當(dāng) MySQL 為復(fù)雜聯(lián)接生成臨時(shí)表時(shí)會(huì)遇到問題,因?yàn)樵谶@些情況下 MySQL 相信數(shù)據(jù)適合原列寬度。
所有整數(shù)類型可以有一個(gè)可選(非標(biāo)準(zhǔn))屬性 UNSIGNED。當(dāng)你想要在列內(nèi)只允許非負(fù)數(shù)和該列需要較大的上限數(shù)值范圍時(shí)可以使用無符號(hào)值。
那取值范圍和顯示寬度到底有什么關(guān)系呢?利用 int 做了個(gè)實(shí)驗(yàn):
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;
查詢結(jié)果:
mysql> select * from int_demo; +----+--------+------------+ | id | int_4 ?| int_8 ? ? ?| +----+--------+------------+ | ?1 | ? 0002 | ? 00001000 | | ?3 | 123456 | 1234567898 | +----+--------+------------+ 2 rows in set (0.00 sec)
總結(jié):
顯示寬度整數(shù)類型的取值范圍是無關(guān)的。
顯示寬度只是指明 mysql 最大可能顯示的數(shù)字個(gè)數(shù),數(shù)值的位數(shù)小于指定的寬度時(shí)左側(cè)用數(shù)字 0 填充。
如果插入了大于顯示寬度的值,只要該值不超過該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來。
到此這篇關(guān)于MySQL中int(10)和int(11)的區(qū)別詳解的文章就介紹到這了,更多相關(guān)MySQL int(10)和int(11)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql連接器之mysql-connector-java問題
這篇文章主要介紹了mysql連接器之mysql-connector-java問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
在JPA項(xiàng)目啟動(dòng)時(shí)如何新增MySQL字段
這篇文章主要介紹了在JPA項(xiàng)目啟動(dòng)時(shí)新增MySQL字段,本來用了JPA,直接實(shí)體類加參數(shù)就可以新增字段了,但是架不住垃圾項(xiàng)目在啟動(dòng)項(xiàng)目時(shí)會(huì)加載數(shù)據(jù)庫SQL文件去插入數(shù)據(jù),需要一些操作幫助修復(fù),需要的朋友可以參考下2024-06-06
MySQL字段默認(rèn)值為NULL時(shí)的避坑指南
在 MySQL 中,字段默認(rèn)值為 NULL 是一種常見設(shè)計(jì),但如果你不小心,NULL 會(huì)成為你系統(tǒng)中最隱蔽的問題源頭之一,本文將通過真實(shí) SQL 示例,帶你了解默認(rèn)值為 NULL 時(shí)常見的“坑”,需要的朋友可以參考下2025-05-05
MySQL優(yōu)化之SQL調(diào)優(yōu)策略分享
這篇文章主要介紹了MySQL優(yōu)化之SQL調(diào)優(yōu)策略,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
MySQL啟動(dòng)報(bào)錯(cuò):Can not connect to MySQL
今天打開數(shù)據(jù)庫出現(xiàn)一個(gè)錯(cuò)誤,ERROR 2003: Can't connect to MySQL server on 'localhost' 的錯(cuò)誤,網(wǎng)上查找原因說是我的mysql服務(wù)沒有打開,所以本文給大家介紹了MySQL啟動(dòng)報(bào)錯(cuò):Can not connect to MySQL server的解決方法,需要的朋友可以參考下2024-03-03

