程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL中寬度指示器

MYSQL中寬度指示器

編輯:MySQL綜合教程

MYSQL中寬度指示器


 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相信數據確實適合原來的列寬度。

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不會影響數組的存儲。只影響顯示

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved