字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。MySQL中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET等。
下表中列出了MySQL中的字符串数据类型,括号中的M
表示可以为其指定长度。
VARCHAR和TEXT类型是变长类型,其存储需求取决于列值的实际长度。
CHAR(M) 为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M表示列的长度,范围是0~255个字符。
例如,CHAR(4) 定义了一个固定长度的字符串列,包含的字符个数最大为4。当检索到CHAR 值时,尾部的空格将被删除。
VARCHAR(M) 是长度可变的字符串,M表示最大列的长度,M的范围是0~65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加1。
例如,VARCHAR(50) 定义了一个最大长度为 50 的字符串,如果插入的字符串只有 10 个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍保留。
【实例】下面将不同的字符串保存到CHAR(4)和VARCHAR(4)列,说明CHAR和VARCHAR之间的差别,如下表所示。
对比结果可以看到,CHAR(4) 定义了固定长度为 4 的列,无论存入的数据长度为多少,所占用的空间均为 4 个字节。VARCHAR(4) 定义的列所占的字节数为实际长度加 1。
- char表示定长字符串,长度是固定的;
- 如果插入数据的长度小于char的固定长度时,则用空格填充;
- 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
- 对于char来说,最多能存放的字符个数为255,和编码无关
- varchar表示可变长字符串,长度是可变的;
- 插入的数据是多长,就按照多长来存储;
- varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
- 对于varchar来说,最多能存放的字符个数为65532
存储密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。
TEXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。
TEXT类型分为4种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。不同的TEXT类型的存储空间和数据长度不同。
- TINYTEXT表示长度为255(28-1)字符的TEXT列。
- TEXT表示长度为65535(216-1)字符的TEXT列。
- MEDIUMTEXT表示长度为16777215(224-1)字符的TEXT列。
- LONGTEXT表示长度为4294967295 或4GB(232-1)字符的TEXT列。