IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【开发经验】mysql如何选择合适的数据类型 -> 正文阅读

[大数据]【开发经验】mysql如何选择合适的数据类型


????????mysql支持多种数据类型,一般情况,对于开发者而言,在保证数据可以正常存储的前提现,会选择一种数据结构简单、占用空间小的类型。例如: 可以用用数值类型保存IP。此,更加详细的梳理下如何选择更加合适的数据类型。

1、整数型

类型大小范围(有符号)范围(无符号)用途
TINYINT1字节(-128,127)(0,255)小整数值。类型字段、状字段
SMALLINT2字节(-32 768,32 767)(0,65 535)大整数值。
MEDIUMINT3字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT4字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数型
BIGINT8字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)特大整数型。主键字段

????????整数类型相对简单、一般用来类型字段、主键字段、数量字段等。数值类型是可以指定宽度int(11)对于大多数应用来说,没有意义。因为int(1)和int(11)占用的空间是一样的

2、金额类型

????????float、double可以保存带有小数的数值,但是计算时会有精度缺失的问题,导致数据库总是有奇奇怪怪的值。进行金额计算时肯定是不允许存在这种情况,因此可以使用decimal进行高精度的运算。例如decimal(10,2),表示共10个数字,小数点后2个数字,小数点前8个数字。如:12345678.00

image-20210918145840382

image-20210918145902579

????????另外,decimal这种数据类型需要额外的空间进行高精度计算。因此,如果对于数值计算较多的系统中,也可以使用bigint代替。一般常见的场景是通过bigint存储最小的单位(分)。这样在计算时避免了精度不准的问题。

3、字符串类型

????????众所周知,varchar是一个可变的字符串类型。久而久之,许多开发者忽略了char类型。虽然varchar适用于大部分场景,但是一些特殊场景char的优势会很明显。此,为char类型进行平反。

varchar类型

????????varchar的优点想必都知道,我就不在阐述,此讨论下其弊端:

  1. 由于是一个长度可变的类型。因此,在保存数据的时候需要1或者2个额外的字节记录字符串的长度。例如varchar(10)需要11个字节进行存储。
  2. 如果修改数据时,使得当前行的数据变长。对于磁盘来说,如果当前页没有足够的空间存储的话,就会很麻烦。对性能上也会有影响

char类型

????????char类型是一种定长的类型。也就是,当设置了char(10)的时候,不管里面存几个字节,总占用空间都是10个字节。也正是这种不灵活的类型,被很多开发者摒弃。其优点

  1. 定长的类型,更加不容易产生空间碎片。
  2. 对于较短的列,char更加节省空间。char(1)需要1个字节;varchar(1)需要2个字节,因为需要有一个字节记录长度。

????????因此,在已知存储的数值是固定长度的时候,例如存储md5的类型、手机号、身份证号时,char类型是一个很好的选择。

注意点

????????虽然varchar是一个长度可变的数据类型。但是,当varchar(10)varchar(255)都去保存123的时候,效果是不一样的。有兴趣的可以看下说明。因此,还是需要选择更加合适的长度。

4、 时间类型

类型占用空间日期格式最小值最大值零值
DATETIME8字节YYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00
TIMESTAMP4字节YYYY-MM-DD HH:MM:SS197001010800012038 年的某个时刻00000000000000
DATE4 字节YYYY-MM-DD1000-01-019999-12-310000-00-00
TIME3 字节HH:MM:SS-838:59:59838:59:5900:00:00
YEAR1 字节YYYY190121550000

时间类型选择相对简单。在此不再多说。

5、BIT类型

????????可以使用BIT列存储一个或者多个true/false的值,一般可以用于是否删除字段。如BIT(1),在数据库插入时,只能插入1/0。其最大长度为64位。

6、枚举类型

????????与JAVA枚举类似,适用于在一组固定的值中选择一个的场景,常见的有男/女红/黄/蓝等等。

枚举的优点:

  1. 即使用保存男/女,在真正存储时实际是保存的索引值,占用空间更少。
  2. 可以控制用户输入,减少异常。

7、SET类型

????????与枚举类型的使用很类似,枚举类型是只能选择一个,但是SET类型可以选择多个。常见的场景有,一个老师可以教多个班级,这种一对多的场景,有时候不想设置中间表进行关联,可以在数据库通过逗号的方式进行分割,SET类型就是一个很好的选择,可以很好的限制垃圾数据。

总结

对于JAVA而言,总结了一下java属性对应数据库字段类型的对应关系。大概如下,请大家参考。

java类数据库
ByteTINYINT
ShortSMALLINT
IntegerINT
LongBIGINT
FloatFLOAT
DoubleDOUBLE
BigDecimalDECIMAL
BooleanBIT
StringVARCHAR
BooleanCHAR(1)
java.uitl.Date/java.sql.DateDATETIME/TIMESTAMP
ClobCLOB
BlobBLOB

在这里插入图片描述
本文正在参与炫“库”行动-人大金仓征文大赛

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:51:25  更:2021-09-20 15:52:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:40:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码