2011-11-08 51 views
35

我假設INT(1)與TINYINT(1)完全相同,但我真的不知道。每當我的值只能是一個整數(例如值爲0-9)時,我總是用INT(1)來表示它是一個整數,它只會是一個字符,我認爲這意味着它只能是0到9的值(如果我錯了,請給我解釋一下)。我一直忽略了其他類型的INT,你可以將這個數字轉換爲數字。我不懂MySQL,並且傾向於避免你可以用它做更復雜的事情。在MySQL中使用INT(1)與TINYINT(1)是否有區別?

所以我的問題是,如果你爲每種類型定義長度爲1,各種整數類型INT,TINYINT,SMALLINT,MEDIUMINT和BIGINT之間是否有區別;?如果不是,我是否應該使用它們(我可以看到它們用於更多的語義含義,TINYINT比INT更具體)?如果是這樣,我可以輕鬆地(和/或我應該)通過我的數據庫並將所有INT(1)字段更改爲TINYINT(1)字段?

+0

我相信'TINYINT(1)'是一個1位而不是1位的整數。我不知道'INT(1)',但是如果它正確存儲數字0到9,繼續使用它:)但我一直認爲它也是1位。 – Ryan

+0

@minitech'TINYINT'是1個字節,不是1位 – Phil

+0

@Phil:Oops:P所以我把我的評論改爲:「他們都是1個字節。」 – Ryan

回答

35

整數列類型括號中的數字是「顯示寬度」。這不會影響存儲要求,因爲它們是預先定義的。

延伸閱讀

+3

所以即使我定義INT(1)只允許一個字符,它仍然會佔用4個字節,不管是什麼? – animuson

+1

@animuson'INT(1)'不**只允許一個字符。它在結果集中設置該列的顯示寬度。閱讀上面的最後一個鏈接,它解釋得很好 – Phil

+1

哦,我明白了。猜測我應該繼續在過去的鏈接2. o.o此外,如果我只是將字段從INT更改爲TINYINT,如果所有值都是0和1,或者我應該讓它獨立,是否會損害任何內容? – animuson

41

這裏你就會明白它更好的辦法!

tinyint: 1 byte, -128 to +127/0 to 255 (unsigned) 
smallint: 2 bytes, -32,768 to +32,767/0 to 65,535 (unsigned) 
mediumint: 3 bytes, -8,388,608 to 8,388,607/0 to 16,777,215 (unsigned) 
int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647/0 to 4,294,967,295 (unsigned) 
bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807/0 to 18,446,744,073,709,551,615 (unsigned) 
+3

謝謝,這是超方便的! – Braunson

+2

這應該是選擇的答案:)! – Hussard

+0

如果您使用的是phpmyadmin,只需將鼠標懸停在選擇下拉菜單上,選擇類型後就會自動顯示所有這些詳細信息。 :) –

相關問題