字符串类型
下表中列出了 MySQL 中的字符串数据类型,括号中的M
表示可以为其指定长度。
类型名称 | 说明 | 长度范围 | 占用的存储空间 |
---|---|---|---|
CHAR(M) | 固定长度 | 0<=M<=255 | M 个字节 |
VARCHAR(M) | 变长字符串 | 0<=M<=65535 | M+1个字节 |
TINYTEXT | 非常小字符串 | 0<=L<=255 | L+1字节 |
TEXT | 小的字符串 | 0<=L<=65535 | L+2字节 |
MEDIUMTEXT | 中等大小的字符串 | 0<=L<=16777215 | L+3字节 |
LONGTEXT | 大的字符串 | 0<=L<=4294967295 | L+4字节 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 0<=L<=65535 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 字符串集合,字符串对象可以有零个或 多个SET成员 | 0<=L<=64 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
- CHAR 和 VARCHAR
CHAR 和 VARCHAR 类型都可以存储比较短的字符串。
CHAR
- char(M)为固定长度字符串,在定义时指定字符串长度。如果不指定,则默认一个字符。
- 如果插入的数据比指定的长度小,则会在右侧填充空格已达到指定的长度,不过检索时会删除。
- 定义CHAR类型字段时,申明的字段长度即为所占存储空间的字节数。
VARCHAR
- VARCHAR(M) 定义时,必须指定长度M,否则会报错。
- VARCHAR(M)指的是能存储M个字符,而实际占用的空间为字符串的实际长度加 1或者2。
- VARCHAR 在值保存和检索时尾部的空格仍保留(自己插入的空格)。
- TEXT类型
TEXT用来保存文本类型的字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。
TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。
在向TEXT类型的字段插入数据时,系统自动按照实际长度存储,不需要预先定义长度。
类型 | 说明 | 大小(字节) |
---|---|---|
TINYTEXT | 小文本 | 0<=L<=255 |
TEXT | 普通文本 | 0<=L<=65535 |
MEDIUMTEXT | 中等大小文本 | 0<=L<=16777215 |
LONGTEXT | 长文本 | 0<=L<=4294967295 (相当于4GB字符) |
TEXT文本类型,可以存储比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用CHAR,VARCHAR来替代。还有TEXT类型不用加默认值,加了也没用。
- ENUM类型
ENUM 类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时指定。设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。如果创建的成员中有空格,尾部的空格将自动被删除。
类型 | 长度范围 | 占用存储空间 |
---|---|---|
ENUM | 1<=L<=65535 | 1或2个字节 |
alter table 表名 add 字段 enum('男','女');
- ENUM 值在内部用整数表示,每个枚举值均有一个索引值;
insert into 表名 values('男'); //一般的插入方法
insert into 表名 values(1); //插入枚举的第一个索引值
- 列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号,枚举最多可以有 65535 个元素。
- SET类型
SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值。
成员个数范围 | 占用的存储空间 |
---|---|
1<=L<=8 | 1个字节 |
9<=L<=16 | 2个字节 |
17<=L<=24 | 3个字节 |
25<=L<=32 | 4个字节 |
33<=L<=64 | 8个字节 |
alter table 表名 add 字段 set('唱','跳','篮球');
-
与 ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。
-
但与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合。
insert into 表名 values('篮球'); //允许单个插入
insert into 表名 values('篮球,唱,跳');//允许插入多个列表中的值","隔开
提示:如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;