02-04-列类型(字符串)

字符串类型

char

定长字符:指定长度之后,系统一定会分配指定的空间去存储数据

基本语法:char(L):L代表字符数(英文与中文一样,这里是字符数)L长度为0到255

varchar

变长字符:指定长度后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出设置的长度的前提下)。

基本语法:varcher(L):L代表字符数,L的长度理论值为0到65535

因为varcher要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2两个字节的额外开销:是用来保存数据所占用的空间长度。如果数据本身小于127个字符那么额外开销一个字节;如果数据本身超过127个字符那么久开销两个字节。

charvarchar数据存储对比(utf8,一个字符占3个字节)

存储数据char(2)varchar(2)char所占字节varchar所占字节
AAA2 * 3= 61 * 3 + 1= 4
ABABAB2 * 3= 62 * 3 + 1= 7

charvarchar的区别:

  1. char一定会使用指定的空间,但是varchar是根据数据来定空间
  2. char的数据查询效率比varchar高:因为char的长度一定,就在这么个空间去查就行,varchar是需要通过后面的记录数来计算

实际使用场景

如果数据定长,那么使用char类型

如果数据不定长,那么使用varchar类型

如果数据长度超过255个字符,那么无论是否是定长都会使用text而不是用charvarchar

text

文本类型:MySQL提供了两种文本类型

text:存储普通的文本类型

blob:存储二进制文本(图片,文件),一般不使用blob来存储文件本身,通常是使用一个链接来指向文件本身(节省空间)。

text

系统提供了四种text

  • tinytext:系统使用一个字节来保存,实际能够存储的数据为:2^8+1
  • text:使用两个字节来保存,实际能够存储的数据为:2^16+2
  • mediumtext:使用三个字节保存,实际存储为:2^24+3
  • longtext:使用四个字节来保存,实际存储为:2^32+4

注意:

  1. 在选择对应的存储文本的时候,不用刻意去选择text的类型,系统会自动根据存储的数据长度来选择合适的文本类型。
  2. 在选择字符存储的时候,如果数据超过255个字符,那么一定要选择text存储。

enum

枚举类型:在数据插入之前,先设定几个项,这几个项就是可能出现最终出现的数据结果。

如果确定某个字段的数据只有那么几个值:比如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:使用枚举。

基本语法:enum(数据值1,数据值2,...)

系统提供了1到2个字节来存储枚举数据:通过计算enum列举的具体值来选择实际的存储空间:如果数据值列表255个以内,那么一个字节就够,如果超过255但是小于65525,那么系统采用两个字节保存。

测试案例

  1. 创建表

    create table my_enum(
    gender enum('男','女','保密')
    )charset=utf8;
    
  2. 插入数据(合法数据)

    insert into my_enum values('男'); 
    insert into my_enum values('女'); 
    insert into my_enum values('男'); 
    
  3. 插入错误数据

    enum有规范数据的功能,能够保证插入的数据必须时设定的范围,其他类型都不可以。

    insert into my_enum values('male'); 
    

    在这里插入图片描述

  4. 枚举enum存储原理

    实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标规则从1开始。

    特性:

    MySQL中系统是自动进行类型转换的:如果遇到+``-``*``/,系统就会自动将数据转换成数值,而普通字符串转换成0.

    select gender+0 from my_enum;
    

    在这里插入图片描述

  5. 既然实际enum字段存储是数值:那么在进行数据插入的时候,就可以使用对应的数值来进行

    insert into my_enum values(3);
    

    在这里插入图片描述

枚举的意义

  1. 规范数据本身,限定只能插入规定的数据项
  2. 节省存储空间

set

集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,0表示该选项没有被选中

基本语法:set('值1','值2','值3',...)

系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元

1个字节:set只能有8个选项

2个字节:set只能有16个选项

3个字节:set只能有24个选项

8个字节:set只能有64个选项

setenum一样,最终存储到数据字段中的依然是数字而不是真实的字符串

测试案例

  1. 创建表

    create table my_set(
    hobby set('篮球','足球','羽毛球','乒乓球','网球','橄榄球','冰球','高俅')
    )charset=utf8;
    
  2. 插入数据

    可以插入多个数据,就是在数据插入的字符串中,使用对应的逗号,将选项进行隔开

    insert into my_set values('篮球,乒乓球,冰球');
    

    在这里插入图片描述

  3. 数据选项所在的顺序与数据插入的顺序无关:最终都会变成选项对应的顺序

    insert into my_set values('高俅,足球,篮球,乒乓球,冰球');
    

    在这里插入图片描述

  4. 分析数据存储的方式

    • 系统将对应的数据选项(设计)按照顺序进行编排,从第一个开始占位,每一个都对应一个二进制位。
    • 数据在存储的时候,如果被选中,那么对应的位的值就为1,否则为0
    • 系统在进行存储的时候,会自动将得到的最终的二进制颠倒过来,然后在进行转换成十进制存储
  5. 查看数据

    select hobby+0 from my_set;
    

    在这里插入图片描述

  6. 既然是数值,那么就可以插入数值代替实际插入数据

    insert into my_set values(255);
    

    在这里插入图片描述

    数字插入的前提是对应的二进制位上都有对应的数据项。

集合的意义:

  1. 规范数据
  2. 节省存储空间

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值