MySQL -- 数据类型

MySQL – 数据类型

文章目录

  • MySQL -- 数据类型
  • 一、数据类型
    • 1.数据类型分类
    • 2.数值类型
      • 2.1.tinyint
      • 2.2.bit
      • 2.3小数类型
    • 3.字符串类型
      • 3.1.char
      • 3.2.varchar
    • 4.时间和日期类型
    • 5.enum和set


一、数据类型

1.数据类型分类

MySQL -- 数据类型_第1张图片

2.数值类型

MySQL -- 数据类型_第2张图片

2.1.tinyint

tinyint类型的数值范围是-128 ~ 127;
MySQL -- 数据类型_第3张图片
可以看到越界的数值会报错,无法插入表中
这是因为数据库内部是有约束的,符合约束条件才可以进行操作,不符合条件就无法操作;
数据类型本质就是一种约束;
在MySQL中,整形可以指定有符号和无符号的,默认是有符号的
可以通过unsigned来说明某个字段是无符号的
MySQL -- 数据类型_第4张图片
在这里插入图片描述

2.2.bit

bit[(M)] :位字段类型。M表示每个值的位数,范围从1到64。 如果M被忽略,默认为1。
MySQL -- 数据类型_第5张图片
向bit类型元素中插入数据,但是没有显示,这是因为bit字段在显示的时候,是按照ASCII码对应显示的;
MySQL -- 数据类型_第6张图片

2.3小数类型

  • float:
    float[(m,d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节;
    float(4,2)表示的范围是-99.99 - 99.99,MySQL在保存值时会进行四舍五入
    MySQL -- 数据类型_第7张图片
    多出来的部分被四舍五入了;
    float还可以定义为无符号类型,使用unsigned修饰:
    MySQL -- 数据类型_第8张图片
  • decimal:
    decimal (m,d)[unsigned]:定点数m指定长度,d表示小数点的位数;
    decimal(5,2)表示的范围是-999.99 - 999.99;
    decimal(5,2) unsigned表示的范围0 ~ 999.99;
    decimal和float很像,但是有区别:float和decimal表示的精度不一样;
    MySQL -- 数据类型_第9张图片
    说明:
    • float表示的精度大约是7位;
    • decimal精度更高,整数最大位数m为65;支持小数最大位数d是30;如果d被省略,默认为0;如果m被省略,默认是10;

3.字符串类型

3.1.char

char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255;
MySQL -- 数据类型_第10张图片
char(2)表示可以存放两个字符,可以是字母或汉字,但是不能超过2个,最多只能是255;

3.2.varchar

varchar(L):可变长度字符串,L表示字符长度,最大长度65535个字节;
MySQL -- 数据类型_第11张图片
关于varchar(len),Ien到底是多大,这个len值和表的编码密切相关:

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3个字节用于记录数据大小,所以说有效字节数是65532;
  • 当我们的表的编码是utf8时, varchar(n)的参 数n最大值是65532/3-21844[因为utf中,-一个字符占
    用3个字节],如果编码是gbk, varchar(n)的参数n最大是65532/2-32766 (因为gbk中, -一个字符
    占用2字节)。

char和varchar的比较
在这里插入图片描述
如何选择定长和变成字符串:

  • 如果数据确定长度都一样,就使用定长(char) ,比如:身份证,手机号,md5;
  • 如果数据长度有变化,就使用变长(varchar),比如:名字,地址,但是你要保证最长的能存的进去;
  • 定长的磁盘空间比较浪费,但是效率高;
  • 变长的磁盘空间比较节省,但是效率低;
  • 定长的意义是,直接开辟好对应的空间;
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少;

4.时间和日期类型

date:日期 ‘yyy-m-dd’ ,占用三字节;
datetime:时间日期格式 ‘yyy-mm-dd HH : ii : ss’ 表示范围从1000到9999,占用八字节;
timestamp:时间戳,从1970年开始的 ‘yyy-mm-dd HH : ii : ss’ 格式和datetime完全一致,占用四字节;
MySQL -- 数据类型_第12张图片
在表中只插入了前两个数据,但是时间戳的数据也更新到的最新的时间,这是因为只要对表中的数据做增、删、改,时间戳就会自动更新到最新时间;

5.enum和set

  • enum:枚举,单选类型;
    enum(选项1, 选项2, 选项3…);
    该设定只是提供了若干个选项的值,最终一个单元格中, 实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号;
  • set:集合,多选类型;
    set(选项值1, 选项值2 ,选项值3, …)
    该设定只是提供了若干个选项的值,最终一个单元格中, 设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是”数字",因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,最多64个。
    set其实是位图类型,不是简单的数字;
    在这里插入图片描述

MySQL -- 数据类型_第13张图片
MySQL -- 数据类型_第14张图片
在这里插入图片描述
MySQL -- 数据类型_第15张图片
使用find_in_set函数进行set的查询:
MySQL -- 数据类型_第16张图片
也可以通过与或级联条件进行查询;

你可能感兴趣的:(MySQL,mysql,数据库,1024程序员节)