問題:
mysql的字段,unsigned int(3), 和unsinged int(6), 能存儲的數值范圍是否相同。如果不同,分別是多大?int(0) 能存多少位數字?
不同,int(3)最多顯示3位無符號整體,int(6)最多顯示6位無符號數。
如果你的答案和上面的一致,恭喜你和我犯了一樣的錯誤。
真實情況:
我們建立下面這張表:
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
插入一些數據后
發現,無論是int(3), int(6), 都可以顯示6位以上的整數。但是,當數字不足3位或6位時,前面會用0補齊。
查下手冊,解釋是這樣的:
MySQL還支持選擇在該類型關鍵字后面的括號內指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內保存的值的范圍,也不限制超過列的指定寬度的值的顯示。
也就是說,int的長度並不影響數據的存儲精度,長度只和顯示有關,為了讓大家看的更清楚,我們在上面例子的建表語句中,使用了zerofill。
結論:
無論是unsigned int(3)或 unsiend int(6),存儲的都是4字節無符號整數, 也就是0~2^32。