18、MySQL 教程 - MySQL 数据类型-字符串类型

本篇来学习字符串类型,在SQL中,将字符串类型分成了6类:char, varchar, text, blob, enum, 和set。下面挑选枚举和集合来举例看看。

定长字符串

定长字符串:char,磁盘上二维表在定义结构的时候,就已经确定了最终数据的存储长度。

char(L): L代表length,可以存储的长度,单位为字符,最大长度值可以为255.

char(4): 在UTF8环境下,需要4*3=12个字节(utf8默认3个字节存储一个字符)

变长字符串

变长字符串:varchar, 在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少是根据具体的数据来确定。varchar(L): L表示字符长度,理论长度是65536个字符,但是会多出一到2个字节来确定存储的实际长度。

如何选择定长或者是变长字符串?

定长的磁盘空间比较浪费,但是效率高;

变长的磁盘空间比较节省,但是效率低;

如果数据基本上确定长度都一样,那么建议使用定长,例如身份证,电话号码,手机号码。

如果数据不能确定长度(不同数据有变化),建议使用变长,例如姓名,地址。

文本字符串

上面提到char最大长度是255个,如果数据量非常大,通常说超过255个字符就会使用文本字符串。文本字符串根据存储的数据的格式分成text和blob两类。

text: 存储文字(二进制数据实际上都是存储路径)

blob: 存储二进制数据(通常不用)

枚举

Enum:事先将所有可能出现的结果都设计好,实际上存储的数据数据必须是规定好的数据中的一个。

枚举的使用方式

定义:enum(可能出现的元素列表);例如 enum(‘男’, ‘女’, ‘保密’)

举例:创建一个枚举表

 

插入数据

 

其实在enum中还可以插入数字型数据,这是为什么?

 

枚举原理:枚举在进行定义的时候,系统会自动建立一个数字与枚举元素的对应关系,然后在进行数据插入,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统自动将数值转换成对应的字符串显示。

集合字符串

集合跟枚举类似,实际存储的也是数值,而不是字符串(集合是多选),集合的使用方式如下:

定义:set(元素列表)

使用:可以使用元素列表中的元素(一个或者多个),用逗号分隔。

举例,创建一个set表

 

插入集合数据

 

看到上面第二行插入语句的值写的是3,查看结果发现显示插入的数据是足球和篮球。原来这里3等于1+2,1根据set的定义表示足球,2表示篮球,3表示羽毛球。回到前面提到集合和枚举很类似,可以利用数字和集合里面元素进行加法运算,如下图。

 

所以,集合中实际也是采用数字来存储的,本篇关于字符串的数据类型就介绍到这里。