详解mysql int类型的长度值问题
提問:
MySQL的字段,unsigned int(3), 和unsinged int(6), 能存儲(chǔ)的數(shù)值范圍是否相同。如果不同,分別是多大?
回答:
不同,int(3)最多顯示3位無符號(hào)整體,int(6)最多顯示6位無符號(hào)數(shù)。?
如果你的答案和上面的一致,恭喜你和我犯了一樣的錯(cuò)誤。
真實(shí)情況:
我們建立下面這張表:
CREATE TABLE `test` (
? ? `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
? ? `i1` int(3) unsigned zerofill DEFAULT NULL,
? ? `i2` int(6) unsigned zerofill DEFAULT NULL,
? ? PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入一些數(shù)據(jù)后?
?
發(fā)現(xiàn),無論是int(3), int(6), 都可以顯示6位以上的整數(shù)。但是,當(dāng)數(shù)字不足3位或6位時(shí),前面會(huì)用0補(bǔ)齊。
查下手冊(cè),解釋是這樣的:?
MySQL還支持選擇在該類型關(guān)鍵字后面的括號(hào)內(nèi)指定整數(shù)值的顯示寬度(例如,INT(4))。該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時(shí)從左側(cè)填滿寬度。顯示寬度并不限制可以在列內(nèi)保存的值的范圍,也不限制超過列的指定寬度的值的顯示。?
顯示寬度(例如,INT(4))。該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時(shí)從左側(cè)填滿寬度。
顯示寬度并不限制可以在列內(nèi)保存的值的范圍,也不限制超過列的指定寬度的值的顯示。
當(dāng)結(jié)合可選擴(kuò)展屬性ZEROFILL使用時(shí), 默認(rèn)補(bǔ)充的空格用零代替。
也就是說,int的長度并不影響數(shù)據(jù)的存儲(chǔ)精度,長度只和顯示有關(guān),為了讓大家看的更清楚,我們?cè)谏厦胬拥慕ū碚Z句中,使用了zerofill。
結(jié)論:
無論是unsigned int(3)或 unsiend int(6),存儲(chǔ)的都是4字節(jié)無符號(hào)整數(shù), 也就是0~2^32。
總結(jié)
以上是生活随笔為你收集整理的详解mysql int类型的长度值问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB Wiredtiger存储
- 下一篇: ThinkPad紧凑型蓝牙键盘(0B47