資料庫中除了物件管理(尤其是Table、View、Index)、權限外, 就屬資料型態為資料庫使用者最常遇見的觀念, 今天我們就來討論MySQL有那些資料型態
在今天的討論中, 我只是把MySQL的資料型態做個列表說明...
- 數值資料型態
有INTEGER, SMALLINT, DECIMAL, NUMERIC, FLOAT, REAL, DOUBLE PRECISION. 我們常用INT代替INTEGER, DEC代替DECIMAL, 以及DOUBLE代替DOUBLE PRECISION.
INTEGER有五個相關的型態:
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~9223372036854775807, 如無正負號則為0~18446744073709551615
其他都是浮點數,
DECIMAL(M, D): 總計M位數, 小數點D位, 約佔用最多4位元組空間
NUMERIC(M, D): 總計M位數, 小數點D位, 約佔用最多4位元組空間
FLOAT, REAL, DOUBLE: 精度不同的浮點數, 在MySQL中也允許FLOAT(M, D)、REAL(M, D)或DOUBLE(M, D)的方式宣告, 但建議用DECIMAL、NUMERIC有較好的程式移植性, 佔用位元組空間方面, FLOAT(p): 如果P介於0到24間, 佔用4位元組, 介於25到53之間, 佔用8位元組; FLOAT佔用4位元組; REAL及DOUBLE佔用8位元組
另外還有一個BIT, 一個位元, 但MySQL容許BIT(M)的方式宣告, 即將M個位元構成一個資料欄項, 我們可以用來指定每個位置的存放位元為0或1, 這對一些Flag的應用是很方便的佔用的空間大約是(M+7)/8 bytes
- 日期資料型態
DATETIME: 'YYYY-MM-DD HH:MI:SS', 佔用八個位元組
DATE: 'YYYY-MM-DD', 佔用3個位元組
TIMESTAMP: 'YYYY-MM-DD HH:MI:SS', 佔月4個位元組, 其內容是由系統自動給予
TIME: 'HH:MI:SS', 佔用3個位元組
YEAR: YYYY, 佔用一個位元組
- 字元資料型態
CHAR(M): M個固定長度字元, M介於0到255之間
VARCHAR(M): M個變動長度字元, 如M介於0到255之間, 佔用M+1個位元組空間. 如M大於255, 則佔用M+2個位元組空間
BINARY(M): 佔用M個位元組, M介於0到255之間
VARBINARY(M): 如M介於0到255之間, 佔用M+1個位元組空間. 如M大於255, 則佔用M+2個位元組空間
BLOB, TEXT: 又有TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT等不同的宣告方式, 這部份, 我想等到討論到圖片檔案或Word、Excel等檔案如何存放在MySQL中時, 再詳細說明這幾個資料型態比較容易解釋
ENUM('值1','值2',...): 字序集合, 意即, '值1'是在位置0, '值2'在位置1...依此類推, 找出一個字串值在此集合中的位置, 佔用1到2個位元組, 在ENUM集合中可以放65536個元素
SET('值1','值2',...): 字串集合, 可以將一群相關的字串宣告成一個資料集合, 例如SET('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'), 最多能有64個元素, 視元素多少, 可能佔用1, 2, 3, 4或8個位元組
以上就是MySQL中所有的資料型態, 如何使用, 我會在往後的方享中一個一個的以實例說明, 今天先列舉說明...明天, 我們會回到資料表(Table)、View和INDEX的討論...