iT邦幫忙

DAY 7
3

只談MySQL系列 第 7

只談MySQL (第七天) 資料型態

資料庫中除了物件管理(尤其是Table、View、Index)、權限外, 就屬資料型態為資料庫使用者最常遇見的觀念, 今天我們就來討論MySQL有那些資料型態
在今天的討論中, 我只是把MySQL的資料型態做個列表說明...

  1. 數值資料型態
    有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
  2. 日期資料型態
    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, 佔用一個位元組
  3. 字元資料型態
    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的討論...


上一篇
只談MySQL (第六天) 資料表
下一篇
只談MySQL (第八天) Index
系列文
只談MySQL30

1 則留言

0
mobo
iT邦新手 4 級 ‧ 2009-10-23 10:50:07

請問文中
TIMESTAMP: 'YYYY-MM-DD HH:MI:SS', 佔月4個位元組, 其內容是由系統自動給予

是說timstamp 資料沒辦法自行將值放入嗎?
如: table test
testtime timestamp
item vatchar(50)

我不能做
insert test (testtime,item) values ('2009-10-23 15:30:10','Math');
是這個意思嗎 ?

我要留言

立即登入留言