【MySQL--->数据类型】

文章目录

    • @[TOC](文章目录)
  • 一、数据类型分类
  • 二、整型类型
  • 三、bit(位)类型
  • 四、float类型
  • 五、decimal类型
  • 六、char和varchar类型
    • 1.char类型
    • 2.varchar
    • 3.char与varchar的区别
  • 七、日期与时间类型
  • 八、enum和set

一、数据类型分类

【MySQL--->数据类型】_第1张图片
【MySQL--->数据类型】_第2张图片

二、整型类型

【MySQL--->数据类型】_第3张图片

数值类型有数据存储上限,而且每个类型都有无符号和有符号两种,默认有符号,在类型后面加上unsigned就是无符号,以tinyint为例,总共占一个字节,无符号最大存储上限是127,下限-128,有符号最大上限是255,下限是0.
mysql数值类型不会发生数据截断的情况,如果发生越界的情况只会报错,不会数据截断存储.这样能保证数据库中数据的合法性.不同数值类型所占的字节大小不同,视情况选择适当的类型,不能太大也不能太小.

三、bit(位)类型

bit类型就是按比特位存储数据的,类型后面跟(n)可以设置比特位的个数,比特位最大上限是64位,如果类型设置为bit(1),数值只能插入0或者1.,数值的显示是以ascll码值的方式显示的,也是按照ascll码值的方式 存储的.比如存储0或者1是显示不出来的,但是如果是字符的话就可以显示,比如’a’或者97都是显示’a’.
【MySQL--->数据类型】_第4张图片

四、float类型

类型指定格式float(m,d)m代表数据总长度,d代表精度.占4个字节,float unsigned为无符号类型.
float类型后面的小数值如果超出精度会被四舍五入,但是前提是四舍五入以后数据总长度必须不能超过m.
例如float(4.2),无符号上限99.99,下限-99.99,有符号上限99.99.下限是0;
【MySQL--->数据类型】_第5张图片
如果整数部分存储的值超过99,会有精度损失
【MySQL--->数据类型】_第6张图片

五、decimal类型

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal类型与float的精度不同float表示的精度大约是7位。decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

六、char和varchar类型

1.char类型

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

2.varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节,

除了有效数据,还需要腾出最大3个最小1个字节用作字符串长度记录.utf8编码格式汉字占3个字节,gbk编码格式汉字占2个字符,也就是说utf8编码格式下varchar最多可以存储(65535-(1-3))/3个汉字,gbk编码最多可以存储(65535-(1-3))/2个汉字

如果一行只有一个varchar类型,那么上限确实是utf8编码格式下varchar最多可以存储(65535-(1-3))/3个汉字,gbk编码最多可以存储(65535-(1-3))/2个汉字,也就是说这不但是类型的上限也是一个表的一行的上限.

3.char与varchar的区别

char是固定长度的,如果char(4),那么不管存储的数据有没有4字节,都需要4字节的空间,varchar(4)如果存储的实际数据是1字节,那么还需要1字节存储字符串长度,所以实际占空间2字节.

应用场景,如果所需的数据是多变的,那么应该使用varchar类型,如果担心长度不够用,可以将L定义的长一些.如果是固定长度的,那么应该使用char,应为char不需要多余字节维护长度.

七、日期与时间类型

date :日期 ‘yyyy-mm-dd’ ,占用3字节
datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用8字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用4字节
如果更新数据,更新数据,timestamp类型时间戳会自动更新;【MySQL--->数据类型】_第7张图片

八、enum和set

语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。
set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…最多64个
【MySQL--->数据类型】_第8张图片
set和enum也可以用位图的方式传递参数,那个比特位上有1,就代表传递那个参数
【MySQL--->数据类型】_第9张图片
查找方式select * from 表名 where 列名=值;但是这样只能查找刚好符合条件的选项,不能查找包含此条件,但是也满足其他条件的选项.
【MySQL--->数据类型】_第10张图片
使用find_in_set(值,列名)函数可以查刚好符合条件的选项和包含此条件,但是也满足其他条件的选项.
【MySQL--->数据类型】_第11张图片


你可能感兴趣的:(mysql,数据库)