標籤:
1,在老版本的MySQL 3.22中,MySQL的單表限大小為4GB,當時的MySQL的儲存引擎還是ISAM儲存引擎。但是,當出現MyISAM儲存引擎之後,也就是從MySQL 3.23開始,MySQL單表最大限制就已經擴大到了64PB了(官方文檔顯示)。也就是說,從目前的技術環境來看,MySQL資料庫的MyISAM儲存 引擎單表大小限制已經不是有MySQL資料庫本身來決定,而是由所在主機的OS上面的檔案系統來決定了。 而MySQL另外一個最流行的儲存引擎之一Innodb儲存資料的策略是分為兩種的,一種是共用資料表空間儲存方式,還有一種是獨享資料表空間儲存方式。 當使用共用資料表空間儲存方式的時候,Innodb的所有資料儲存在一個單獨的資料表空間裡面,而這個資料表空間可以由很多個檔案組成,一個表可以跨多個檔案存在,所 以其大小限制不再是檔案大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其資料表空間的最大限制為64TB,也就是說,Innodb的單 表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關資料。 而當使用獨享資料表空間來存放Innodb的表的時候,每個表的資料以一個單獨的檔案來存放,這個時候的單表限制,又變成檔案系統的大小限制了。
2,int 內部儲存int都是4個位元組。括弧內的數字是顯示寬度。不設定zerofill時,沒有任何用處,設定了之後,不足位時會用0補全。只用於顯示,跟儲存沒有關係。int類型括弧裡面的數字對mysql是沒有意義的,不寫沒關係,寫了也不影響;如果需要更大就用bigint
####################################################################################################################################################
utf8,一個漢字需要三個位元組
作為對ANSI/ISO SQL92標準的擴充,MySQL也支援上表所列的整數型別TINYINT、MEDIUMINT和BIGINT。另一個擴充是MySQL支援可選地指定一個整型值顯示的寬度,用括弧跟在基本關鍵詞之後(例如,INT(4))。這個可選的寬度指定被用於其寬度小於列指定寬度的值得左填補顯示,但是不限制能在列中被儲存的值的範圍,也不限制值將被顯示的位元,其寬度超過列指定的寬度。當與可選的擴充屬性ZEROFILL一起使用時,預設的空格填補用零代替。例如,對於聲明為INT(5) ZEROFILL的列,一個為4的值作為00004被檢索。注意,如果你在一個整型列儲存超過顯示寬度的更大值,當MySQL對於某些複雜的連接(join)產生暫存資料表時,你可能會遇到問題,因為在這些情況下,MySQL相信資料確實適合原來的列寬度。
*****************************************************************************************************************************************************************************************
http://caixia.blog.51cto.com/2266345/759569
MySQL支援所有標準SQL數值資料類型。這些類型包括嚴格數值資料類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數值資料類型(FLOAT、REAL和DOUBLE PRECISION)。關鍵字INT是INTEGER的同義字,關鍵字DEC是DECIMAL的同義字。
BIT資料類型儲存位欄位值,並且支援MyISAM、MEMORY、InnoDB和BDB表。
作為SQL標準的擴充,MySQL也支援整數類型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個整數類型的儲存和範圍。
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~9233372036854775807,不帶符號:0~18446744073709551615
FLOAT:4位元組 單精確度浮點數,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8位元組 雙精確度浮點數,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2位元組 以字串形式表示的浮點數,它的取值範圍可變,由M和D的值決定。
MySQL還支援選擇在該類型關鍵字後面的括弧內指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。
顯示寬度並不限制可以在列內儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。
當結合可選擴充屬性ZEROFILL使用時, 預設補充的空格用零代替。例如,對於聲明為INT(5) ZEROFILL的列,值4檢索為00004。請注意如果在整數列儲存超過顯示寬度的一個值,當MySQL為複雜聯結產生暫存資料表時會遇到問題,因為在這些情況下MySQL相信資料適合原列寬度。
聲明整型資料列時,我們可以為它指定個顯示寬度M(1~255),如INT(5),指定顯示寬度為5個字元,如果沒有給它指定顯示寬度,MySQL會為它 指定一個預設值。顯示寬度只用於顯示,並不能限制取值範圍和佔用空間,如:INT(3)會佔用4個位元組的儲存空間,並且允許的最大值也不會是999,而是 INT整型所允許的最大值。
為了節省儲存空間和提高資料庫處理效率,我們應該根據應用資料的取值範圍來選擇一個最適合的資料列類型。
如果把一個超出資料列取值範圍的數存入該列,則mysql就會截短該值,如:
我們把99999存入smallint(3)資料列裡,因為smallint(3)的取值範圍是-32768——32767,所以
就會被截短成32767儲存。顯示寬度3不會影響數組的儲存。隻影響顯示
http://www.yesky.com/imagesnew/software/mysql/manual_Reference.html
MYSQL中寬度指標