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

mysql數據類型分析總結

編輯:MySQL綜合教程

mysql數據類型分析總結


MySQL數據類型
數值值
數值是諸如48或193.62這樣的值。MySQL支持說明為整數(無小數部分)或浮點數
(有小數部分)的值。整數可按十進制形式或十六進制形式表示。
(字符)串值
串是諸如“Madison,Wisconsin”或“patientshowsimprovement”這樣的值。既可用單引號也可用雙引號將串值括起來。


序列說明
\0NUL(ASCII0) \n新行
\’單引號 \r回車
\”雙引號 \t制表符
\b退格 \\反斜槓

日期和時間值

日期和時間是一些諸如“1999-06-17”或“12:30:43”這樣的值。MySQL還支持日期/時間的組合,如“1999-06-1712:30:43”。要特別注意這樣一個事實,即MySQL是按年-月-日的順序表示日期的。MySQL的初學者通常對這一點很驚奇,其實這是ANSISQL的標准格式。可以利用DATE_FORMAT()函數以任意形式顯示日期值,但是缺省顯示格式首先顯示年,而且輸入值也必須首先給出年。

NULL值

NULL是一種“無類型”的值。它過去慣常表示的意思是“無值”、“未知值”、“丟失的值”、“溢出值”以及“沒有上述值”等。可將NULL值插入表中、從表中檢索它們,測試某個值是否是NULL,但不能對NULL值進行算術運算(如果對NULL進行算術運算,其結果為NULL)。

MySQL的列類型

數據庫中的每個表都是由一個或多個列構成的。在用CREATETABLE語句創建一個表時,要為每列指定一個類型。列的類型比數據類型更為特殊,它僅僅是如“數”或“串”這樣的通用類型。列的類型精確地描述了給定表列可能包含的值的種類,如SMALLINT或VARCHAR(32)。

MySQL的列類型是一種手段,通過這種手段可以描述一個表列包含什麼類型的值,這又決定了MySQL怎樣處理這些值。例如,數值值既可用數值也可用串的列類型來存放,但是根據存放這些值的類型,MySQL對它們的處理將會有些不同。每種列類型都有幾個特性如下:

■其中可以存放什麼類型的值。

■值要占據多少空間,以及該值是否是定長的(所有值占相同數量的空間)或可變長的(所占空間量依賴於所存儲的值)。

■該類型的值怎樣比較和存儲。

■此類型是否允許NULL值。

■此類型是否可以索引。

數值列類型

TINYINT非常小的整數

SMALLINT較小整數

MEDIUMINT中等大小的整數

INT標准整數

BIGINT大整數

FLOAT單精度浮點數

DOUBLE雙精度浮點數

DECIMAL一個串的浮點數

 

數值列類型的取值范圍

TINYINT[(M)]

有符號值:-128到127(-2^7到2^7-1)

無符號值:0到255(0到2^8-1)

SMALLINT[(M)]

有符號值:-32768到32767(-2^15到2^15-1)

無符號值:0到65535(0到2^16-1)

MEDIUMINT[(M)]

有符號值:-8388608到8388607(-2^23到2^23-1)

無符號值:0到16777215(0到2^24-1)

INT[(M)]

有符號值:-2147683648到2147683647(-2^31到2^31-1)

無符號值:0到4294967295(0到2^32-1)

BIGINT[(M)]

有符號值:-9223372036854775808到9223373036854775807(-2^63到2^63-1)

無符號值:0到18446744073709551615(0到2^64-1)

FLOAT[(M,D)],最小非零值:±1.175494351E-38

FLOAT(4)最大非零值:±3.402823466E+38

DOUBLE[(M,D)],最小非零值:±2.2250738585072014E-308

FLOAT(8)最大非零值:±1.7976931348623157E+308

DECIMAL(M,D)可變;其值的范圍依賴於M和D

 

數值列類型的存儲需求

TINYINT[(M)]1字節

SMALLINT[(M)]2字節

MEDIUMINT[(M)]3字節

INT[(M)]4字節

BIGINT[(M)]8字節

FLOAT[(M,D)],FLOAT(4)4字節

DOUBLE[(M,D)],FLOAT(8)8字節

DECIMAL(M,D)M字節(MySQL<3.23),M+2字節(MySQL33.23)

可對所有數值類型指定ZEROFILL屬性。它使相應列的顯示值用前導零來填充,以達到顯示寬度。

AUTO_INCREMENT。在需要產生唯一標識符或順序值時,可利用AUTO_INCREMENT屬性。AUTO_INCREMENT值一般從1開始,每行增加1。在插入NULL到一個AUTO_INCREMENT列時,MySQL插入一個比該列中當前最大值大1的值。一個表中最多只能有一個AUTO_INCREMENT列。對於任何想要使用AUTO_INCREMENT的列,應該定義為NOTNULL並定義為PRIMARYKEY或定義為UNIQUE鍵。

UNSIGNED。此屬性禁用負值。將列定義為UNSIGNED並不改變其基本數據類型的取值范圍,它只是前移了取值的范圍。設為UNSIGNED,則可取原雙倍的值。

串列類型

CHAR定長字符串

VARCHAR可變長字符串

TINYBLOB非常小的BLOB(二進制大對象)

BLOB小BLOB

MEDIUMBLOB中等的BLOB

LONGBLOB大BLOB

TINYTEXT非常小的文本串

TEXT小文本串

MEDIUMTEXT中等文本串

LONGTEXT大文本串

ENUM枚舉;列可賦予某個枚舉成員

SET集合;列可賦予多個集合成員

串列類型

類型說明 最大尺寸 存儲需求

CHAR(M) M字節 M字節

VARCHAR(M) M字節 L+1字節

TINYBLOB,TINYTEXT 2^8-1字節 L+1字節

BLOB,TEXT 2^16-1字節 L+2字節

MEDIUMBLOB,MEDIUMTEXT 2^24-1字節 L+3字節

LONGBLOB,LONGTEXT 2^32-1字節 L+4字節

ENUM(“value1”,“value2”,...)65535個成員1或2字節

SET(“value1”,“value2”,...)64個成員1、2、3、4或8字節

串實際是一種“通用”類型,因為可用它們來表示任意值。例如,可用串類型來存儲二進制數據,如影像或聲音,或者存儲gzip的輸出結果,即存儲壓縮數據。

CHAR和VARCHAR是最常使用的串類型。它們是有差異的,CHAR是定長類型而VARCHAR是可變長類型。CHAR(M)列中的每個值占M個字節;短於M個字節的值存儲時在右邊加空格(但右邊的空格在檢索時去掉)。如果所需的值在長度上變化不大,則CHAR是一種比VARCHAR好的選擇,因為處理行長度固定的表比處理行長度可變的表的效率更高。

BLOB是一個二進制大對象,是一個可以存儲大量數據的容器,可以使其任意大。在MySQL中,BLOB類型實際是一個類型系列(TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB),除了在可以存儲的最大信息量上不同外,它們是等同的。MySQL還有一個TEXT類型系列(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)。除了用於比較和排序外,它們在各個方面都與相應的BLOB類型等同,BLOB值是區分大小寫的,而TEXT值不區分大小寫。BLOB和TEXT列對於存儲可能有很大增長的值或各行大小有很大變化的值很有用,例如,字處理文檔、圖像和聲音、混合數據以及新聞文章等等。

ENUM和SET是一種特殊的串類型,其列值必須從一個固定的串集中選擇。它們之間的主要差別是ENUM列值必須確實是值集中的一個成員,而SET列值可以包括集合中任意或所有的成員。換句話說,ENUM用於互相排斥的值,而SET列可以從一個值的列表中選擇多個值。可對ENUM成員按名或者按編號進行運算,SET列的數值表示與ENUM列的表示有所不同,集合成員不是順序編號的。每個成員對應SET值中的一個二進制位。第一個集合成員對應於0位,第二個成員對應於1位,如此等等。

可對CHAR和VARCHAR類型指定BINARY屬性使列值作為二進制串處理(即,在比較和排序操作區分大小寫)。可對任何串類型指定通用屬性NULL和NOTNULL。如果兩者都不指定,缺省值為NULL。但是定義某個串列為NOTNULL並不阻止其取空串。空值不同於遺漏的值,因此,不要錯誤地認為可以通過定義NOTNULL來強制某個串列只包含非空的值。還可以對除BLOB和TEXT類型外的所有串列類型用DEFAULT屬性指定一個缺省值。如果不指定缺省值,MySQL會自動選擇一個。對於可以包含NULL的列,其缺省值為NULL。對於不能包含NULL的列,除ENUM列外都為空串,在ENUM列中,缺省值為第一個枚舉成員。

日期與時間列類型

DATE“YYYY-MM-DD”格式表示的日期值

TIME“hh:mm:ss”格式表示的時間值

DATETIME“YYYY-MM-DDhh:mm:ss”格式

TIMESTAMP“YYYYMMDDhhmmss”格式表示的時間戳值

YEAR“YYYY”格式的年份值

日期和時間列類型

DAT E “ 1000 - 01 - 01 ”到“ 9999- 12 - 31 ”

TI M E “ - 838:59:59”到“83 8 : 5 9 : 5 9”

DAT E T I M E “ 1000 - 01 - 01 00:00:00” 到“ 9999- 12 - 31 23:59:59”

TI M E S TA M P [ (M) ] 19700101000000 到2037年的某個時刻

YE A R [ (M) ] 1901 到21 5 5

TIMESTAMP顯示格式

TI M E S TA M P ( 1 4 ) Y Y Y Y M M D D h h m m s s

TI M E S TA M P ( 1 2 ) Y Y Y Y M M D D h h m m

TI M E S TA M P ( 1 0 ) Y Y M M D D h h m m

TI M E S TA M P ( 8 ) Y Y Y Y M M D D

TI M E S TA M P ( 6 ) Y Y M M D D

TI M E S TA M P ( 4 ) Y Y M M

TI M E S TA M P ( 2 ) Y Y

日期和時間列類型的存儲需求

DAT E 3 字節

TI M E 3 字節

DAT E T I M E 8 字節

TI M E S TA M P 4 字節

YE A R 1 字節

如果將DATE 值賦給DATETIME 列,MySQL會自動地追加一個為“00 : 0 0 : 0 0”的時間部分。TI M E S TAMP 類型之所以得到這樣的名稱是因為它在創建或修改某個記錄時,有特殊的記錄作用。如果在一個TI M E S TAMP 列中插入NU L L,則該列值將自動設置為當前的日期和時間。在建立或更新一行但不明確給TI M E S TAMP 列賦值時也會自動設置該列的值為當前的日期和時間。

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