字符串可以用来表示任何一种值,所以它是最基本的类型之一。我们可以用字符串类型来存储图象或 声音之类的二进制数据,也可存储用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用服务 器的字符集作为默认字符集。
非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的。而二 进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。 下面介绍两种字符串的比较方式:
二进制字符串的比较方式是一个字节一个字节进行的,比较的依据是两个字节的二进制值。也就是说 它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的。