当前位置: 首页 > article >正文

数据库中的数据类型

一、数值类型

1、字节类型

字节类型 大小表示范围unsigned表示范围
tinyint1字节-2 ^ 7 ~ 2 ^ 7 - 10 ~ 2 ^ 8 - 1
smallint2字节-2 ^ 15 ~ 2 ^ 15 - 10 ~ 2 ^ 16 - 1
mediumint3字节-2 ^ 23 ~ 2 ^ 23 - 10 ~ 2 ^ 24 - 1
int4字节-2 ^ 31 ~ 2 ^ 31 - 10 ~ 2 ^ 32 - 1
bigint8字节-2 ^ 63 ~ 2 ^ 63 - 10 ~ 2 ^ 64 - 1

unsigned加在字节类型后面。

数据类型本身就是一种约束。

当插入数据不在范围内时mysql不会进行插入。

2、位类型

bit(m)    m默认是1,范围[1, 64]

查看bit类型时由于是二进制,所以要转化成十进制才能看到,即select hex(bit_name) form table_name

3、浮点数类型

a、float类型

float(m, d)      占用4个字节

m表示显示长度,d表示小数位数。

例如float(4,2) 范围就是 -99.99 ~ 99.99

注意

存值时四舍五入

定义成unsigned,负数部分直接舍去

当位数较多时会出现精度损失

b、double类型

与float类型相似,只是精度更高,占用8个字节

c、decimal类型

不会出现精度损失,并且精度更高。

decimal(m,d)    

m最大65位,d最大30位,不设置默认10位

二、字符串类型

1、固定字符串    char类型      

char(L)   L最大长度255字符

在mysql中不论是字母,数字,汉字都看做一个个字符,类似于符号

2、变长字符串   varchar类型

carchar(L)    L最大长度65535字节

但是varchar会取出1~3个字节来记录总长度,所以有效的最大字节数是65532

3、补充知识

(1)字节与字符

在utf8编码下,1字符 = 3字节

在gbk编码下,1字符 = 2字节

所以在utf8编码下,varchar(n),其中n的范围是[1,65532 / 3],即[1,21844]

所以在gbk编码下,varchar(n),其中n的范围是[1,65532 / 2],即[1,32766]

(2)对比不同

varchar与char不同,char是固定开L个字符大小,varchar是最多开L个字符,实际用多少给多少

存储char(4)varchar(4)char占用字节varchar占用大小字节
abcdabcdabcd3*4=123*4+1=13
aaa3*4=123*1+1=4

注意varchar要开一个字节记录大小

char磁盘空间较浪费,但是效率高

varchar磁盘空间较节省,但是效率低

三、日期和时间类型

1、date类型   日期

格式:yyyy-mm-dd,占用3个字节

2、datetime类型   时间日期

格式:yyyy-mm-dd HH:ii:ss,占用8个字节

3、timestamp类型   时间戳

格式:yyyy-mm-dd HH:ii:ss,占用4个字节

在插入数据时,时间戳类型不要自己插入,他会在每一次更新数据时自动更新。

四、枚举类型(单选类型)

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

最多65535个选项

五、集合类型(多选类型)

格式:set('选项值1','选项值2','选项值3'...)

最多64个选项值

六、枚举类型与集合类型的补充知识

1、enum插入数据时的数字含义

我们在插入数据时,不仅可以直接插入选项名称,也可插入数字,类似于c语言中的枚举类型,选项1,2,3...的下标就是从1,2,3...、

2、set插入数据时的数字含义

与enum的数字不同,set中的数字是代表位图,选择选项就是1,不选择就是0,组成的二进制再变成十进制就是set插入的数字含义。

例如在上图中我们有insert into votes values('赵六',1,7);这条sql语句,7的二进制位是111,所以从左向右有三个hobby选项被选择,最后显示时就发现赵六hobby有羽毛球,篮球,乒乓球。

3、enum查找

语句:select * from table_name where enum_name=...;

4、set查找

select * from table_name where set_name=set_name1; 表示在set中查找只有set_name1的选项

select * from table_name where find_in_set(sub,list); 表示在set中查找包含sub的选项

而且find_in_set函数可以用and连接达到查找多个选项,毕竟set是多选类型

http://www.lryc.cn/news/2415194.html

相关文章:

  • 确定最佳聚类的算法(一)
  • HLS新手入门教程
  • gerber导出文件解析,二十几个文件都是干什么的
  • ztree使用总结
  • 虚拟运行环境管理工具Vagrant详细使用教程
  • XXXX is not translated in en (English), zh (Chinese)
  • 什么是业务? 编程语言范畴中谈到的业务是什么
  • 全球免费公共DNS解析服务器 |解决无法上网+加速+防劫持
  • 多线程之pthread_create()函数
  • 《第十五章 异常处理 - try-catch 语句》
  • 字符分割函数strtok
  • 计算机组成原理_浮点数的定义
  • 什么是阻抗?
  • Mssql手工注入
  • sda、sdb、sda1、sda2的意思
  • 详细介绍 CVS (附带 其配置与使用方法)
  • JDK的下载安装及配置(包含多个JDK)
  • Solr的源代码解析和开发技巧
  • 口碑超好的五款桌面管理软件|桌面管理软件排行榜
  • CKEditor5导入并解析word功能的集成,实现word转html
  • 进阶注解处理器 processor (三)
  • IP、子网、超网(CIDR)、网段知识讲解
  • ixp协议服务器,ipx协议中的“内部网络号”是什么意思?
  • C语言—strcpy,strncpy函数介绍、以及自己实现字符串的拷贝代码演示
  • 深度剖析 Go 的 nil
  • 什么是哈希算法sha2?和sha1什么区别?SHA2代码签名?sha3又是什么?
  • Linux C语言运行库 glibc
  • YOLOv5输入端(一)—— Mosaic数据增强|CSDN创作打卡
  • AS2安全基础知识
  • JPEG文件格式分析及举例验证