字串可以用來表示任何一種值,所以它是最基本的類型之一。我們可以用字串類型來儲存圖象或 聲音之類的位元據,也可儲存用gzip壓縮的資料。下表介紹了各種字串類型:
Table 1.3. 字串類資料列類型
| CHAR[(M)] |
M位元組 |
M位元組 |
| VARCHAR[(M)] |
M位元組 |
L+1位元組 |
| TINYBLOD,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位元組 |
L+1、L+2是表示資料列是可變長度的,它佔用的空間會根據資料行的增減面則改變。資料行的總長度 取決於存放在這些資料列裡的資料值的長度。L+1或L+2裡多出來的位元組是用來儲存資料值的長度的。在對 長度可變的資料進行處理時,MySQL要把資料內容和資料長度都儲存起來。
如果把超出字串最大長度的資料放到字元類資料列中,MySQL會自動進行截短處理。
ENUM和SET類型的資料列定義裡有一個列表,列表裡的元素就是該資料列的合法取值。如果試圖把一個 沒有在列表裡的值放到資料列裡,它會被轉換為空白字串(“”)。
字串類型的值被儲存為一組連續的位元組序列,並會根據它們容納的是二進位字串還是非二進位字 符而被區別對待為位元組或者字元:
二進位字串被視為一個連續的位元組序列,與字元集無關。MySQL把BLOB資料列和帶BINARY屬性的CHAR 和VARCHAR資料列裡的資料當作二進位值。
非二進位字串被視為一個連續排列的字元序列。與字元集有關。MySQL把TEXT列與不帶BINARY屬性的 CHAR和VARCHAR資料列裡的資料當作二進位值對待。
在MySQL4.1以後的版本中,不同的資料列可以使用不同的字元集。在MySQL4.1版本以前,MySQL用服務 器的字元集作為預設字元集。
非二進位字串,即我們通常所說的字串,是按字元在字元集中先後次序進行比較和排序的。而二 進位字串因為與字元集無關,所以不以字元順序排序,而是以位元組的二進位值作為比較和排序的依據。 下面介紹兩種字串的比較方式:
二進位字串的比較方式是一個位元組一個位元組進行的,比較的依據是兩個位元組的二進位值。也就是說 它是區分大小寫,因為同一個字母的大小寫數值編碼是不一樣的。