本篇来学习字符串类型,在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表示羽毛球。回到前面提到集合和枚举很类似,可以利用数字和集合里面元素进行加法运算,如下图。
所以,集合中实际也是采用数字来存储的,本篇关于字符串的数据类型就介绍到这里。