2012年9月16日 星期日

MySQL資料型態描述與比較








字串


型態 空間需求 最大長度 備註
CHAR(N)
BINARY(N)
N bytes N bytes
  • 不需要長度訊息
    • 因為字串長度為固定的,所以不需要像VARCHAR (VARBINARY)一樣去儲存字串的長度
  • 效率
    • 固定的資料字串長度,因字串長度固定,所以資料庫執行效率較VARCHAR (VARBINARY)高
  • CHAR資料儲存(在這裡以底線「_」代表空格)
    • 若在CHAR(15)下儲存字串的時候,若儲存一字串為「Hello _ World」(包含中間空格為11個字)的字串,則在CHAR(15)儲存時候則會儲存為「Hello _ World _ _ _ _」,在有不足的字串回填充空格,所以在上述例子中則會填充4個空格,在取資料的時候資料庫會自動把字串後面的空白拿掉,所以取出的字串則為「Hello _ World」
  • CHAR空白字元讀取錯誤(在這裡以底線「_」代表空格)
    • 同樣在CHAR(15)下儲存資料的時候,若儲存一字串為「_Hello _ World _」(包含中間及前後空格為13個字),則在CHAR(15)儲存時候則會儲存為「_ Hello _ World _ _ _」,但是在,由於CHAR資料型態在取資料的時候資料庫會自動把字串後面的空白拿掉,所以取出的字串則為「_Hello _ World」,原本儲存在最後的空白字元被過掉了。
  • BINARY資料儲存
    • BINARY資料在儲存時與CHAR類似,但它儲存的時候是儲存字元而非字串,所以在填充時是填充\0 (0 byte)而非填充空格,且在撈取資料的時候不會把填充的資料刪除掉,可能會造成資料讀取錯誤
VARCHAR(N)
VARBINARY(N)

N bytes
N characters
  • 長度訊息
    • 因為字串為可變的長度,所以需要去儲存字串的長度,才知道要讀取的時候多少資料,長度不同需要不同的儲存空間的長度訊息
    • N<=255:需要 1 bytes
    • N>255:需要 2 bytes
  • 長度計算
    • 在MySQL 4的版本中,utf8一個字必須要用3 bytes去儲存,所以65535/3=21845,但是在VARCHAR必須要有另外2個bytes的空間去儲存字串的長度,所以僅能有21845-1=21844個字
    • 在MySQL 5+,N為字元長度非位元數,所以在utf8編碼下,若N為30,則可以儲存30個字元,而非30/3=10個字元。
TINYTEXT
TINYBLOB
儲存字元+1 byte 256 bytes
  • 字串(字元)長度訊息
    • 1 byte
TEXT
BLOB
儲存字元+2 byte 65,535 bytes
64 K
  • TEXT
    • 儲存字元
    • 有字元集
    • 有排序規則
  • BLOB
    • 儲存2進制資料
    • 無字元集
    • 無排序規則
  • 字串(字元)長度訊息
    • 2 bytes
MEDIUMTEXT
MEDIUMBLOB
儲存字元+3 byte 16,777,215 bytes
  • 字串(字元)長度訊息
    • 3 bytes
LONGTEXT
LONGBLOB
儲存字元+4 byte 4,294,967,295 bytes
4GB
  • 字串(字元)長度訊息
    • 4 bytes
ENUM 1 或 2 bytes 65535個成員類型
SET 1,2,3,4或8 bytes 64個成員類型
1 1 1 1


整數


型態 空間需求 資料範圍 備註
TINYINT(N) 1 byte 有負號 :
-128~127
無負號:
0~255
SMALLINT(N) 2 bytes 有負號 :
-32768~32767
無負號:
0~65535
MEDIUMINT(N) 3 bytes 有負號 :
-8388608~8388607
無負號:
0~16777215
INT(N) 4 bytes 有負號 :
-2147483648~2147483647
無負號:
0~4294967295
BIGINT(n) 8 bytes 有負號 :
-9223372036854775808~9223372036854775807
無負號:
0~18446744073709551615
1 1 1 1



浮點數


型態 空間需求 資料範圍 備註
FLOAT(M,D) 4 bytes
  • 精準度
    • 小數點後7位數(0.1234567)
DOUBLE(M,D) 8 bytes
  • 精準度
    • 小數點後15位數(0.123456789012345)
1 1 1 1




時間


型態 空間需求 資料範圍 備註
DATE 3 bytes 1000-01-01~9999-12-31
TIME 3 bytes -838:59:59 ~ 838:59:59
DATETIME 8 bytes 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP 4 bytes 1970-01-01~2037年
YEAR(2 | 4) 1 bytes 4-digit:1901 ~ 2155
2-digit:1970 ~ 2069
1 1 1 1





參考文章


沒有留言:

張貼留言

ADS