Skip to content

Latest commit

 

History

History
53 lines (31 loc) · 3.26 KB

zi-fu-chuan-lei-xing.md

File metadata and controls

53 lines (31 loc) · 3.26 KB

字符串类型

字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。MySQL中的字符串类型有 CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUMSET等。

下表中列出了MySQL中的字符串数据类型,括号中的M表示可以为其指定长度。

VARCHAR和TEXT类型是变长类型,其存储需求取决于列值的实际长度。

CHAR和VARCHAR类型

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表示定长字符串,长度是固定的;
  • 如果插入数据的长度小于char的固定长度时,则用空格填充;
  • 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
  • 对于char来说,最多能存放的字符个数为255,和编码无关

varchar的特点

  • varchar表示可变长字符串,长度是可变的;
  • 插入的数据是多长,就按照多长来存储;
  • varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
  • 对于varchar来说,最多能存放的字符个数为65532

存储密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。

TEXT 类型

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列。