整數類型的存儲和范圍(來自mysql手冊)
?
類型 | 字節 | 最小值 | 最大值 |
(帶符號的/無符號的) | (帶符號的/無符號的) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
注:帶符號的/無符號的 可設置例如 ? Alter Table tablename ?ADD fieldname ?TINYINT(1) UNSIGNED
表格一共有四列分別表式:字段類型, 占用字節數, 允許存儲的最小值, 允許存儲的最大值.
計算機存儲單位的換算:
1B=8bit?(位. 存放一位二進制數,即 0 或 1,最小的存儲單位)
1KB=1024B(byte 字節)
1MB=1024KB(千字節)
拿tinyint舉例
tinyint類型, 占用字節數為1byte=8bit ?即8個1組成的 二進制(11111111)=256 ,如果設置了無符號最大只能存255 ?有符號為-128~127?
同理拿int類型為例:
int類型, 占用字節數為4byte, 學過計算機原理的同學應該知道, 字節(byte)并非是計算機存儲的最小單位, 還有比字節(byte)更小的單位, 也就是位(bit),一個位就代表一個0或1; 8個位組成一個字節; 一般字節用大寫B來表示byte, 位用小寫b來表示bit.
那么根據int類型允許存儲的字節數是4個字節, 我們就能換算出int?UNSIGNED(無符號)類型的能存儲的最小值為0, 最大值為4294967295(即4B=32b, 最大值即為32個1組成);
接下來我們再說說我們建表時的字段長度到底是怎么一回事.
CREATE TABLE `test` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`number` INT( 5 ) NOT NULL
) ENGINE = MYISAM ;
?
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`number` INT( 5 ) NOT NULL
) ENGINE = MYISAM ;
?
mysql手冊中這個長度/值用"M"來表示的. ?M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲大小或類型包含的值的范圍無關;
這句話看上去不太容易理解, 因為這里有個關鍵詞容易讓我們混淆, "最大顯示寬度"我們第一反應是該字段的值最大能允許存放的值的寬度. 以為我們建了int(1),就不能存放數據10了, 其實不是這個意思.
這個M=5我們可以簡單的理解成為, 我們建立這個長度是為了告訴MYSQL數據庫我們這個字段的存儲的數據的寬度為5位數,? 當然如果你不是5位數(只要在該類型的存儲范圍之內)MYSQL也能正常存儲,? 這也就能解釋以上標紅的話.
我們把這個字段的"屬性"修改為UNSIGNED ZEROFILL看一下效果.
[ZEROFILL]
ALTER TABLE `test` CHANGE COLUMN `number` `number` INT(5) ZEROFILL UNSIGNED NOT NULL DEFAULT '0';
?
ALTER TABLE `test` CHANGE COLUMN `number` `number` INT(5) ZEROFILL UNSIGNED NOT NULL DEFAULT '0';
我們看到現在我的number字段, 長度(M)=5, 屬性=UNSIGNED ZEROFILL(無符號,用0來填充位數),? 設置這個屬性后系統會自動把number字段M不夠5位的在左側用0來填充; 效果如下


附加
bit、byte、位、字節、漢字、字符
bit、byte、位、字節、漢字的關系1 bit = 1 二進制數據1 byte = 8 bit1 字母 = 1 byte = 8 bit1 漢字 = 2 byte = 16 bit1. bit:位一個二進制數據0或1,是1bit;2. byte:字節存儲空間的基本計量單位,如:MySQL中定義 VARCHAR(45) 即是指 45個字節;1 byte = 8 bit3. 一個英文字符占一個字節;1 字母 = 1 byte = 8 bit4. 一個漢字占2個字節;1 漢字 = 2 byte = 16 bit
?