2011-07-30 78 views
8

進出口新的數據庫編程和我有一個非常基本的問題:MySQL數據庫的數據類型

在我的phpMyAdmin界面,即時通訊使用的是創建在我的數據庫表,這是什麼意思時,列「型」(即。datatype)具有數據類型和其後的括號中的內容。 例如: int(20),bigint(30).....

我明白int和bigint類型意味着使用的字節數,因此也就是可以存儲的值的範圍。但括號中的值是什麼意思?

什麼的(20)和(30)代表....什麼樣的影響,這是否會....

對不起,如果Q是基本的,我想了解數據庫.. ..

非常感謝

回答

12

基本上,這是一個顯示寬度

我發現這個概念很好的解釋here is所以決定不要自己描述它,讓你從原始來源自己讀。

以同樣的方式,一個最大長度可以爲字符串數據類型來指定(例如VARCHAR(5)=最大5個字符),數字數據類型的細胞可以具有「顯示長度」中指定(如:INT(5))。

在INT列上指定顯示長度會限制該列的範圍是一個常見的誤解。作爲示例,通常認爲將列定義爲INT(1)會將列的無符號範圍降低爲0 - 9,並且INT(2)會將列的無符號範圍縮小爲0 - 99。不是這種情況。無論指定的顯示寬度如何,數據列總是具有可用的無符號範圍0-4294967295或-2147483648至2147483647的有符號範圍,無論是1(INT(1))還是20( INT(20))。

  1. 顯示寬度不會更改數據類型的存儲要求。
  2. 顯示寬度不以任何方式改變的實際數據(即:它存儲了數據的整個值)
  3. 甲列返回它是在查詢調用時滿值,而不管顯示寬度的(書直接違背這一要求它使如上所示)
+0

感謝您的詳細答案sll。欣賞它。 – banditKing

+0

@ user657514'INT(x)'/'BIGINT(x)'與* VARCHAR(x)'''CHAR(x)'或'NUMERIC(x,y)'相比*是不同的*。在前一個地方,它僅僅是一個「顯示寬度」。後者的情況實際上是施加了限制。這在整個響應過程中得到解決,但「看到」卻令人困惑。 – 2011-07-30 20:59:00

+0

@sll我發現那個鏈接...不太好。根據文章'VARCHAR(55)',不能存儲長度爲零的字符串!我對信源的準確性的信念被削弱了。 :( – 2011-07-30 21:03:37

0

括號中的值是字段的大小或長度。 [Edit strike]如果設置爲2,則uint字段只能託管0到99之間的值[/ strike]如果您希望值不超過此限制,可以自行設置此值,從而節省一點內存。與varchar有關。

這裏另一個大約VARCHAR尺寸螺紋:What are the optimum varchar sizes for MySQL?

+0

你肯定INT(2)將限制可容納INT列0-99 – sll

+0

值範圍哼。所以如果我有一個INT作爲我的數據類型,那麼它支持的值的範圍是:-2147483648到2147483647.但是如果我預計我不會使用這個範圍,我可以在括號中設置一個值,如下所示:INT(4 )並且這樣做意味着上限減少到3647? 你能舉一個實例來澄清一下嗎? 謝謝 – banditKing

+1

不,我很抱歉。這僅適用於字符。看到sll的答案! –