💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## 字符串类型 #### char 定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据. 基本语法:char(L),L代表**字符数**(中文与英文字母一样),L长度为0到255. #### varchar 变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度) 基本语法:Varchar(L),L代表字符数,L的长度理论值位0到65535. 1. char一定会使用指定的空间,varchar是根据数据来定空间. 2. char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算. 3. 如果确定数据一定是占指定长度,那么使用char类型,如果不确定数据到底有多少,那么使用varchar类型,如果数据长度超过255个字符,不论是否固定长度,都会使用text,不再使用char和varchar. 4. 因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个**字节**的额外开销:是用来保存数据所占用的空间长度如果数据本身小于127个**字符**:额外开销一个**字节**;如果大于127个,就开销两个**字节**. #### char和varchar数据存储对比(utf8,一个字符都会占用3个字节,gbk一个字符占用2个字节) | 存储数据 |char(2) | varchar(2) | char所占字节 |varchar所占字节 | | --- | --- | --- | --- | --- | | A | A |A | 2* 3 = 6 | 1 * 3 +1 = 4 | char因为是定长,所以肯定用了两个字符去存储,而varchar是不定长,只会用一个字符去存储,还有一个字节用来记录长度. ## text 文本类型 : 本质上mysql提供了两种文本类型. 1. text : 存储普通的字符文本. 2. blob : 存储二进制文本(图片,文件) ,一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身,这样就可以节省可多的空间. ### 系统中提供了四种text 1. tinytext : 系统使用一个字节来保存,系统是用1个字节来保存数据所在的位置,并不是真的用1个字节来保存数据,实际能够存储的数据为: 2^8 +1 ; 2. text :使用两个字节来存储,实际存储2^16 +2 . 3. mediumtext : 使用三个字节存储,实际存储为 : 2^ 24 +3 . 4. longtext : 使用四个字节存储 , 实际存储为 :2 ^ 32 +4. 注意 : 1. 在选择对应的存储文本的时候,不用颗粒去选择text类型,系统会自动根据存储的数据长度来选择合适的文本类型.一般使用text类型就行了. 2. 在选择字符存储的时候,如果数据超过255个字符,那么一定要选择text存储(效率更高,而且更节省空间). 3. #### enum (枚举类型) 枚举类型: 在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果. 如果确定某个字段的数据只有那么几个值 :如性别,男,女,保密,系统就可以在设定字段的时候规定当前字段只能存在固定的几个值,那么请使用枚举类型. 系统提供了1到2个字节来存储枚举数据 : 通过计算enum列举的具体值来选择实际的存储空间,如果数据值列表在255以内,name1个字节就够了,如果超过255但是小于65535,那么系统采用两个字节来保存. 语法 ~~~ create table class( gender enum('男','女','保密')); ~~~ 注意: 1. 只有插入enum设定的这几个值才能插入成功,否则的话系统会报错. 2. 枚举enum的存储原理:实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标规则从1开始Enum(1=>‘男’,2=>’女’,3=>’保密’). 3. 特性:在mysql中系统是自动进行类型转换的:如果数据碰到“+、-、*、/”系统就会自动将数据转换成数值:而普通字符串转换成数值为0 .Select 字段名 + 0 from 表名. 4. 既然实际enum字段存储的结果是数值:那么在进行数据插入的时候,就可以使用对应的数值来进行. ~~~ select gender + 0 from 表名; 结果: 系统进行了强制转换. +------------+ | gender + 0 | +------------+ | 1 | | 1 | +------------+ ~~~ 枚举类型的意义 : 1. 规范数据本身,限定只能插入规定的数据项. 2. 节省存储空间. #### set (集合类型) 集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,0表示该选项没有被选中。 语法 ~~~ create table class( hobby set('足球','篮球','排球','游泳','乒乓球') ); ~~~ 插入数据 : 注意在最外层加上引号,里面每个数据用逗号隔开, 不在set设置的数据无法插入,这个类型类似html中的多选. ~~~ insert into class values("足球,篮球,游泳"); ~~~