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

MYSQL入門學習之四:MYSQL的數據類型

編輯:MySQL綜合教程

MYSQL入門學習之四:MYSQL的數據類型   相關鏈接: MYSQL入門學習之一:基本操作 http://www.BkJia.com/database/201212/173868.html MYSQL入門學習之二:使用正則表達式搜索 http://www.BkJia.com/database/201212/173869.html MYSQL入門學習之三:全文本搜索 http://www.BkJia.com/database/201212/173873.html   一、整型  www.2cto.com            整數類型是數據庫中最基本的數據類型。標准SQL中支持INTEGER和SMALLINT這兩種整數類型。MySQL數據庫除了支持這兩種類型外,還擴展支持了TINYINT、MEDIUMINT和BIGINT。          各種整數類型的取值范圍、存儲的字節數如下:          整型        字節數  無符號數的取值范圍  有符號數的取值范圍          TINYINT     1       0~255                   -128~127          SMALLINT    2       0~65535                 -32768~12767          MEDIUMINT   3       0~16777215              -8388608~8388607          INT         4       0~4294967295            -2147483648~2147483647          INTEGER     4       0~4294967295            -2147483648~2147483647            BIGINT      8       0~18446744073709551615  -9223372036954775808~9223372036854775807            二、浮點數類型和定點數類型          MySQL使用浮點數類型和定點數類型來表示小數。浮點數類型包括單精度浮點數(FLOAT類型)和雙精度浮點數(DOUBLE類型)。定點數類型就是DECIMAL型。          FLOAT型、DOUBLE型、DECIMAL型的取值范圍、存儲的字節數如下:          小數類型     字節數  負數取值范圍             無符號取值范圍          FLOAT        4       -3.402823466E+38~        0和1.175494351E-38~                   -1.175494351E-38         3.402823466E+38          DOUBLE       8       1.7976931348623157E+308~ 0和2.2250738585072014E~                   -2.2250738585072014E-308 1.7976931348623157E+308          DECIMAL(M,D) M+2     DOUBLE型                 同DOUBLE型          或DEC(M,D)          M:最大長度(包括小數部分,但不包括小數點)          D:小數點後保留長度          對於浮點數和定點數,當插入值的精度高於實際定義的精度,系統會自動進行四捨五入處理。其目的是為了使該值的精度達到要求。浮點數進行四捨五入不會報警,定點數出現警告。          在未指定精度的情況下,浮點數和定點數有其默認的精度。FLOAT類型和DOUBLE類型默認會保存實際精度。這個精度與操作系統和硬件的精度有關。DECIMAL類型默認整數位為10, 小數位為0,即默認為整數。  www.2cto.com            在MySQL中,定點數精度比浮點數要高。而且,浮點數會出現誤差。如果要對數據的精度要求比較高,應該選擇定點數。  三、日期和時間類型  1、DATETIME類型          DATETIME類型表示同時包含日期和時間信息的值。MySQL以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支持的范圍為'1000-01-01 00:00:00'~'9999-12-31 23:59:59'。  2、DATE類型          DATE類型表示只有日期值而沒有時間值的值。MySQL用'YYYY-MM-DD'格式檢索和顯示DATE值。支持的范圍為'1000-01-01'~'9999-12-31'。  3、TIME類型          TIME值可以使用多種表示格式。          'D HH:MM:SS.fraction'格式的字符串。還可以使用下面任何一種“非嚴格”語法'HH:MM:SS.fraction'、'HH:MM:SS'、'HH:MM'、'D HH:MM:SS'、'D HH:MM'、'D HH'或'SS'。這裡D表示日,可以取0~34的值。請注意MySQL不保存分數。          'HHMMSS'格式的沒有間隔符的字符串,被假定為是有意義的時間。例如,'101112'被理解為'10:11:12',但'109712'是不合法的(它有一個沒有意義的分鐘部分),其將變為'00:00:00'。          HHMMSS格式的數值,被假定為是有意義的時間。例如,101112被理解為'10:11:12'。下面的格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。請注意MySQL不保存分數。  4、YEAR類型          YEAR類型是一個單字節類型,用於表示年。MySQL以YYYY格式檢索和顯示YEAR值。范圍為1901~2155。          可以指定各種格式的YEAR值。          四位字符串,范圍為'1901'~'2155'。          四位數字,范圍為1901~2155。          兩位字符串,范圍為'00'~'99'。'00'~'69'和'70'~'99'范圍的值分別被轉換為2000~2069和1970~1999范圍的YEAR值。          兩位整數,范圍為1~99。1~69和70~99范圍的值分別被轉換為2001~2069和1970~1999范圍的YEAR值。請注意兩位整數范圍與兩位字符串范圍稍有不同,因為不能直接將零指定為數字並將它解釋為2000。必須將它指定為一個字符串'0'或'00'或它被解釋為0000。  5、TIMESTAMP類型          TIMESTAMP類型使用4個字節來表示日期和時間。TIMESTAMP類型的范圍從1970-01-001 08:00:01到2038-01-19 11:14:07。MySQL中也是以'YYYY-MM-DD HH:MM:SS'的形式顯示TIMESTAMP類型的值。從其形式可以看出,TIMESTAMP類型與DATETIME類型顯示的格式一樣的。給TIMESTAMP類型的字段賦值的表示方法基本與DATETIME類型相同。值的注意的是,TIMESTAMP類型范圍比較小,沒有DATETIME類型的范圍大。因此,輸入值時要保證在TIMESTAMP類型時有效范圍內。            四、字符串類型          字符串類型是在數據庫中存儲字符串的數據類型。  1、CHAR類型和VARCHAR類型          CHAR類型和VARCHAR類型都是在創建表時指定最大長度,其基本形式如下:          字符串類型(M)          例如,CHAR(4)就是指數據類型為CHAR類型,其最大長度為4。            CHAR類型的長度是固定的,在創建表時就指定了。其長度可以是0~255的任意值。          例如,CHAR(100)就是指定CHAR類型的長度為100。          VARCHAR類型的長度是可變的,在創建時指定了最大長度。定義時,其最大值可以取0~65535之間的任意值。指定VARCHAR類型的最大值以後,其長度可以在0到最大長度之間。例如,VARCHAR(100)的最大長度是100。但是,不是每條記錄都要占100個位置。而是在這個最大值范圍內,使用多少分配多少。VARCHAR類型實際占用的空間為字符串的實際長度加1。這樣,可以有效的節約系統的空間。  2、TEXT類型          TEXT類型是一種特殊的字符串類型。TEXT只能保存字符數據,如文章等。TEXT類型包含TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。          類型        允許的長度       存儲空間          TINYTEXT    0~255字節        值的長度+2個字節          TEXT        0~65535字節      值的長度+2個字節          MEDIUMTEXT  0~167772150字節  值的長度+3個字節          LONGTEXT    0~4294967295字節 值的長度+4個字節          從表可以看出,各種TEXT類型的區別在於允許的長度和存儲空間不同。因此在這幾種TEXT中,根據需求選取既能滿足需要以最節約空間的類型即可。    3、ENUM類型(枚舉類型)  www.2cto.com            ENUM類型又稱為枚舉類型。在創建表時,ENUM類型的取值范圍就以列表的形式指定了。          屬性名 ENUM('值1', '值2',...., '值n');          其中, '屬性名'參數指定字段名稱;'值n'參數表示列表中的第n個值,這些值末尾的空格將會被系統直接刪除。          ENUm類型的值只能列表中的一個元素。其取值列表中最多能有65535個值。列表中的每個值都有一個順序排序的編號,MySQL中存入的是這個編號,而不是列表中的值。          如果ENUm類型加上了NOT NULL屬性,其默認值為取值列表的第1個元素。如果不加NOT NULL屬性,ENUm類型將允許插入NULL,而且NULL為默認值。          CREATE TABLE IF NOT EXISTS `test`.`enum_tbl`(          `a` ENUM('male','female'),          `b` ENUM('true','false') NOT NULL          );          INSERT INTO `test`.`enum_tbl`           VALUES('male', 'true'),(NULL, 'false'), (NULL, NULL),(20, 20);          SELECT * FROM `enum_tbl`;  4、SET類型          基本形式如下:          屬性名 set('值1','值2','值3'...'值n');          其中,'屬性名'參數指定字段名稱;'值n'參數列表中的第n個值,這些值末尾的空格將會被系統直接刪除。其基本形式與ENUM類型一樣。          SET類型的值可以取列表中一個元素或者多個元素的組合。取多個元素時,不同元素之間用逗號隔開。SET類型的值最多只能是64個元素構成的組合。列表中的每一個值都有一個順序排列的編號。MySQL中存入的是這個編號,而不是列表中的值。          插入記錄時,SET字段裡的元素順序無關緊要。存入MySQL數據庫後,數據庫系統會自動按照定義時的順序顯示。  www.2cto.com            CREATE TABLE IF NOT EXISTS `test`.`set_tbl`(          `a` SET('a','b','c','d','e','f','g')          );          INSERT INTO `test`.`set_tbl`    VALUES('f'),('a,b,c'),('d,e,a');          INSERT INTO `test`.`set_tbl` VALUES('h');          SELECT * FROM `set_tbl`;            五、二進制類型          二進制類型是在數據庫中存儲二進制數據的數據類型。          二進制類型   取值范圍          BINARY(M)    字節數為M,允許長度為0~M的定長二進制字符串          VARBINARY(M) 允許長度為0~M的變長二進制字符串,字節數為值的長度加一          BIT(M)       M位二進制數據,M最大值為64          TINYBLOB     可變長二進制數據,最多255個字節          BLOB         可變長二進制數據,最多(2[16]-1)個字節          MEDIUMBLOB   可變長二進制數據,最多(2[24]-1)個字節          LONGBLOB     可變長二進制數據,最多(2[32]-1)個字節  1、BINARY和VARBINARY類型          BINARY和VARBINARY類型都是在創建表時指定了最大長度,其基本形式如下 :          字符串類型(M)          這與CHAR類型和VARCHAR類型相似。          例如,BINARY(10)就是指數據類型為BINARY類型,其最大長度為10。          BINARY類型的長度是固定的,在創建表是就指定了。不足最大長度的空間由"\0"補全。例如,BINARY(50)就是指定BINARY類型的長度為50。          VARBINARY類型的長度是可變的,在創建表時指定了最大長度。指定好了VARBINARY類型的最大值以後,基長度可以在0到最大長度之間。例如,VARBINARY(50)的最大字節長度是50。但是,不是每條記錄的字節長度都是50。在這個最大范圍內,使用多少分配多少。VARBINARY類型實際占用的空間為實際長度加一。這樣,可以有效的節約系統的空間。  2、BIT類型          BIT類型也是創建表時指定了最大長度,其基本形式如下:          BIT(M)          其中,'M'指定了該二進制的數的最大字節長度為M,M的最大值為64。例如,BIT(4)就是數據類型BIT類型,長度為4.若字段的類型BIT(4),存儲的數據是從0到15。因為,變成二進制以後,15的值為1111,其長度為4。如果插入的值為16,其二進制數為10000,長度為5,超過了最大長度。因此大於等於16的數是不能插入到BIT(4)類型的字段中的。在查詢BIT類型的數據時,要用BIN(字段名+0)來將值轉換為二進制顯示。  3、BLOB類型          BLOB類型是一種特殊的二進制類型。BLOB可以用來保存數據量很大的二進制數據,如圖片等。BLOB類型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。這幾種BLOB類型最大的區別就是能夠保存的最大長度不同。LONGBLOB的長度最大,TINYBLOB的長度最小。          BLOB類型與TEXT類型很類似。不同點在於BLOB類型用於存儲二進制數據,BLOB類型數據是根據其二進制編碼進行比較和排序。而TEXT類型是文本模式進行比較和排序的。
 

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