【MySQL--->数据类型】

### 文章目录

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

一、数据类型分类


二、整型类型

数值类型有数据存储上限,而且每个类型都有无符号和有符号两种,默认有符号,在类型后面加上unsigned就是无符号,以tinyint为例,总共占一个字节,无符号最大存储上限是127,下限-128,有符号最大上限是255,下限是0.

mysql数值类型不会发生数据截断的情况,如果发生越界的情况只会报错,不会数据截断存储.这样能保证数据库中数据的合法性.不同数值类型所占的字节大小不同,视情况选择适当的类型,不能太大也不能太小.

三、bit(位)类型

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

四、float类型

类型指定格式float(m,d)m代表数据总长度,d代表精度.占4个字节,float unsigned为无符号类型.

float类型后面的小数值如果超出精度会被四舍五入,但是前提是四舍五入以后数据总长度必须不能超过m.

例如float(4.2),无符号上限99.99,下限-99.99,有符号上限99.99.下限是0;

如果整数部分存储的值超过99,会有精度损失

五、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类型时间戳会自动更新;

八、enum和set

语法:

enum:枚举,"单选"类型;

enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,3,...最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,"多选"类型;

set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,...最多64个

set和enum也可以用位图的方式传递参数,那个比特位上有1,就代表传递那个参数

查找方式select * from 表名 where 列名=值;但是这样只能查找刚好符合条件的选项,不能查找包含此条件,但是也满足其他条件的选项.

使用find_in_set(值,列名)函数可以查刚好符合条件的选项和包含此条件,但是也满足其他条件的选项.


相关推荐
读心悦1 小时前
修改 MySQL 数据库中的唯一键
数据库·mysql
卓琢1 小时前
(九)Shell 脚本(四):正则表达式、sed 和 awk 详解
linux·mysql·正则表达式
qq_213157891 小时前
(c#)unity中sqlite多线程同时开启事务会导致非常慢
数据库·sqlite·c#
北极无雪1 小时前
Spring源码学习(拓展篇):SpringMVC中的异常处理
java·开发语言·数据库·学习·spring·servlet
666xiaoniuzi2 小时前
深入理解 C 语言中的内存操作函数:memcpy、memmove、memset 和 memcmp
android·c语言·数据库
正在走向自律2 小时前
3.使用条件语句编写存储过程(3/10)
数据库·存储过程·安全架构
YONG823_API2 小时前
电商平台数据批量获取自动抓取的实现方法分享(API)
java·大数据·开发语言·数据库·爬虫·网络爬虫
小小不董2 小时前
图文深入理解Oracle DB Scheduler
linux·运维·服务器·数据库·oracle
大拇指的约定3 小时前
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(三),单表查询
数据库·mysql·oracle
阳光阿盖尔3 小时前
redis——哨兵机制
数据库·redis·缓存·主从复制·哨兵