型態 |
空間需求 |
最大長度 |
備註 |
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 |
|
TEXT
BLOB |
儲存字元+2 byte |
65,535 bytes
64 K |
|
MEDIUMTEXT
MEDIUMBLOB |
儲存字元+3 byte |
16,777,215 bytes |
|
LONGTEXT
LONGBLOB |
儲存字元+4 byte |
4,294,967,295 bytes
4GB |
|
ENUM |
1 或 2 bytes |
65535個成員類型 |
無 |
SET |
1,2,3,4或8 bytes |
64個成員類型 |
無 |
1 |
1 |
1 |
1 |
沒有留言:
張貼留言