为了存储字符串、图片和声音等数据, MySQL提供了字符串和二进制类型。下表列举了 MySQL中的字符串和二进制类型。
数据类型 | 类型说明 |
CHAR | 用于表示固定长度的字符串 |
VARCHAR | 用于表示可变长度的字符串 |
BINARY | 用于表示固定长度的二进制数据 |
VARBINARY | 用于表示可变长度的二进制数据 |
BLOB | 用于表示二进制大数据 |
TEXT | 用于表示大文本数据 |
ENUM | 表示枚举类型,只能存储一个枚举字符串值 |
SET | 表示字符串对象,可以有零或多个值 |
BIT | 表示位字段类型 |
表中列举的字符串和二进制类型中,不同数据类型具有不同的特,接下来,针对这些数据类型进行详细的讲解,具体如下。
1、CHAR 和 VARCHAR 类型
CHAR 和 VARCHAR类型都用来表示字符串数据,不同的是,VARCHAR 可以存储可变长度的字符串。在 MySQL中,定义 CHAR 和 VARCHAR 类型的方式如下所示:
CUAR(M) 或 DVARCHAE (M)
在上述定义方式,,M 指的是字符串的最大长度。为了帮助读者更好地理解 CHAR和 VARCHAR 之间的区别,下面以CHAR(4)和 VARCHAR(4)为例进行说明,具体如表 2-5 所示。
表2-5 CHAR(4)和 VARCHAR(4)对比
插入值 |
CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
' ' | ' ' | 4个字节 | ‘ ’ | 1 个字节 |
' ab ' | ' ab | 4个字节 | ' ab ' | 3个字节 |
' abc ’ | ' abc ' | 4个字节 | ' abc ’ | 4个字节 |
' abcd ’ | ' abcd ’ | 4个字节 | ' abcd ’ | 5 个字节 |
' abcdef ' | ' abcd ’ | 4个字节 | ‘ abcd ’ | 5 个字节 |
从表中可以看出,当数据为 CHAR(4)类型时,不管插入值的长度是多少,所占用的存储空间都是 4 个字节。而 VARCHAR(4) 所对应的数据所占用的字节数为实际长度加 1 。
2、BINARY 和 VARBINARY 类型
BINARY和 VARBINARY类型类似于 CHAR 和 VARCHAR,不同的是,它们所表示的是二进制数据。定义 BINARY和 VARBINARY类型的方式如下所示:
BINARY(M) 或 VARBINARY (M)
在上述格式中,M 指的是二进制数据的最大字节长度。
需要注意的是,BINARY类型的长度是固定的,如果数据的长度不足最大长度,将在数据的后面用 " \0 " 补齐,最终达到指定长度。例如,指定数据类型为 BINARY(3),当插入a时,实际存储的数据为 " a\0\0 " ,插人 ab 时,实际存储的数据为 " ab\0 "。
3、TEXT 类型
TEXT 类型用于表示大文本数据,例如,文章内容、评论等,它的类型分为4种,具体如下表所示。
数 据 类 型 | 存 储 范 围 | 数 据 类 型 | 存 储 范 围 |
TINYTEXT | 0~255 字节 | MEDIUMTEXT | 0~16 777 215 字节 |
TEXT | 0~65 535 字节 | LONGTEXT | 0~4 294 967 295 字节 |
4、BLOB 类型
BLOB类型是一种特殊的二进制类型,它用于表示数据量很大的二进制数据,例如图片、PDF 文档等。BLOB类型分为四种,具体如下表所示。
数 据 类 型 | 存 储 范 围 | 数 据 类 型 | 存储范围 |
TINYBLOB | 0~255 字节 | MEDIUMBLOB | 0~16 777 215 字节 |
BLOB | 0~65 535 字节 | LONGBLOB | 0~4 294 967 295 字节 |
需要注意的是,BLOB 类型与 TEXT类型很相似,但 BLOB 类型数据是根据二进制编码进行比较和排序,而 TEXT 类型数据是根据文本模式进行比较和排序。
5、ENUM 类型
ENUM 类型又称为枚举类型,定义 ENUM 类型的数据格式如下所示:
ENUM('值1','值 2','值 3',…,'值 n')
在上述格式中,("值1,"值2,值3,…,"值n) 称为枚举列表,ENUM 类型的数据只能从枚举列表中取,并且只能取一个。需要注意的,枚举列表中的每个值都有一个顺序编号,MySQL 中存入的就是这个顺序编号,而不是列表中的值。
6、SET 类型
SET类型用于表示字符串对象,它的值可以有零个或多个,SET类型数据的定义格式与 ENUM 类型类似,具体语法格式如下所示:
SET('值 1',"值 2',"值 3',…,'值 n')
与 ENUM 类型相同,("值1',"值 2',"值 3,…,值 n) 列表中的每个值都有一个顺序编号,MySQL中存人的也是这个顺序编号,而不是列表中的值。
7、BIT 类型
BIT类型用于表示二进制数据。定义 BIT类型的基本语法格式如下所示,
BIT (M)
在上述格式中,M用于表示每个值的位数,范围为1~64。需要注意的是,如果分配的 BIT(M)类型的数据长度小于 M,将在数据的左边用 0 补齐。例如,为 BIT(6) 分配值 b'101’ 的效果与分配 b'000101' 相同。