mysql09-类列表之字符串类型

字符串类型

char

定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据
基本语法: char(L),L代表字符数(中文与英文字母一样),L长度为0-255

varchar

变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)
基本语法:varchar(L) L代表字符集,L的长度理论值为0-65535

因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生之后,系统都会在数据后面增加1-2字节的额外开销,使用来保存数据占用的空间长度
如果数据本身小于127个字符:额外开销一个字节,如果大于127个,就开销两个字节
//百度百科资料显示:、使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。



char和varchar的区别

  1. char一定会使用指定的空间,varchar是根据数据来指定空间
  2. char的数据查询效率比varchar高;varchar是需要通过后面的记录数来计算
  3. 如果确定数据一定是占指定长度,那么使用char类型
    如果不确定数据到底有多少,那么使用varchar类型
    如果数据长度超过255字符,无论是否固定长度,都会使用text,不再使用char和varchar

text

文本类型:本质上mysql提供了两种文本类型
text:存储普通的字符文本
blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身

text系统中提供的四种text

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


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

enum

枚举类型:在数据插入之前先设定几个项,而这几个项就是最终可能出现的数据结果。
如果确定某个字段的数据只有那么几个值;如性别:男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:使用枚举

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

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

实际操作及其特性

  1. 创建表
  2. 插入数据:合法数据,字段对应的值必须是设定表的时候所确定的值
  3. 错误数据:enum有规范数据的功能,能够保证插入的数据必须是设定的范围,其他的都不行
  4. 枚举enum的存储原理L实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标规则从1开始
    enum(1=>‘男’,2=>‘女’,3=>‘保密’)


    特性:在mysql中系统是自动进行类型转换的,如果数据碰到“+-*/”系统会自动把数据转换成数值,而普通字符串转换为数值0
    select 字段名 +0 from 表名

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

枚举的意义:

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

set

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

基本语法:set (“值1”,“值2”。。。)

系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元
1个字节:set只能有8个选项
2个节字:set只能有6选项
3个节字:set只能有24选项
4个节字:set只能有64选项

实际操作及其特性

set和enum一样最终存储到字段中的依然是数字而不是真实的字符串

  1. 创建表
  2. 插入数据:可以插入多个数据,就是在数据插入的字符串中,使用对应的逗号将选项进行隔开
  3. 数据选项所在的数据与数据插入的顺序无关,最终都会变成选项对应的顺序
  4. 1.分析数据存储的方式:系统将对应的数据选项(设计)按照顺序进行编排:从第一个开始进行占位,每一个对应一个二进制位
    2.数据在存储的时候,如果被选中为1否则为0

    3.系统在进行存储的时候会自动将得到的最终的二进制颠倒过来,然后再进行转换成十进制存储
  5. 查看数据:按照转换成的数值来查看
  6. 既然是数值,那么就可以插入数值来代替实际插入数据



    注意:数字插入的前提是对应的二进制位上对应的数据项,通常不使用插入数值的方式

集合的意义

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

    enum与set

    enum单选框
    set复选框