文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。

数据库中事务是最重要的概念之一,所以上篇着重谈了谈数据库中事务的使用,并且举了实例如何在实际开发中去使用事务进行数据库操作。而我们也知道,Mysql中列的数据类型很多,而大多数人可能只是知道这些不同的数据类型怎么去使用,所以本篇文章主要详细谈谈Mysql中各种不同的数据类型。

Mysql数据类型分类

在Mysql中常用数据类型一共有四种字符串数据类型、日期/时间数据类型、数值数据类型以及二进制数据类型。

  • 字符串数据类型:主要包括下列几种数据类型:char,varchar,tinytext,mediumtext,text,longtext,enum,set。

  • 日期/时间数据类型:主要包含下列几种数据类型:date,time,datetime,timestamp,year。

  • 数值数据类型:主要包含下列几种数据类型:tinyint,smallint,mediumint,int,bigint,float,double,decimal。

  • 二进制数据类型:主要包含下列几种数据类型:tityblob,blob,mediumblob,longblob。

约束条件

在开始正式讲解数据类型之前,我们需要先了解下如何给字段添加一些基本的约束条件。Mysql可以给字段添加的常用约束条件有:unsigned,zerofill,not null,default,primary key,auto_increment,unique key,foreign key。

  • unsigned:无符号类型,加上此约束值无法取负数,只能作用于数值类型数据列。

  • zerofill:当数据显示长度不够时在数据前面补0至指定长度,字段会自动添加unsigned约束。

  • not null:这个很好理解,给字段添加非空约束。

  • default:如果插入数据没有指定值,则使用默认值。

  • primary key:给字段添加主键约束,一个表只能有一个主键,但是可以和其他字段形成组合主键,一般与auto_increment约束一并使用。

  • auto_increment:只能作用于数值类型,字段可以自动递增,默认从1开始。一般和primary key配合使用。

  • unique key:设置唯一约束,则字段的值不能出现重复数据,null除外。

  • foreign key:外键约束,保证数据完整性和唯一性,以及多表联表操作。

字符串类型

char数据类型

定义:可以定义一个固定长度的字符串,长度范围在1-255个字符之间,长度必须在表创建时指定,否则会默认定义为char(1),在存储时字符串如果未达到指定的长度则会填充空格到指定长度。
使用途径:当我们需要涉及一些长度固定的数据列时可以使用char数据类型,比如手机号使用char(11),身份证号使用char(18),用户性别使用char(3)。

varchar数据类型

定义:可以定义一个可变长度的字符串,理论情况下可存储最多255个字节的数据。但是如果创建时指定varchar(x),则只能存储不超过x个字符的数据。
对比char类型区别:实际上我们更经常使用的还是varchar数据类型,因为char类型不管存储数据的长度多少,都会占用定义的字节数,但是varchar只会占用实际字符串长度+1个字节。但是char查询效率相比于varchar会更高,所以存储固定长度时我们可以优先选择char数据类型。
使用途径:一般长度不固定的数据列就可以使用varchar类型,比如姓名,一般中文名字2到5字,所以我们定义为varchar(15)。

tinytext数据类型

定义:tinytext也属于变长字符串,最多可存储不超过255字节的变长文本。
缺点:tinyint数据类型定义时不允许设置默认值,在检索也不存在大小写转换,而且效率低于char以及varchar。所以一般情况下比较少使用该数据类型。

mediumtext数据类型

定义:mediumtext也属于变长字符串,最多可存储不超过16k字节的变长文本。
缺点:mediumtext和tinytext同属于text系列数据类型,所以缺点都是一致的。
使用途径:mediumtext一般用于varchar存储范围不符合时用来存储长文本操作,一般情况下使用mediumtext存储长文本就可以满足操作。

text数据类型

定义:text也属于变长字符串,最多可存储不超过64k字节的变长文本。
缺点:text也属于text系列数据类型,所以缺点和上述都是一致的。
使用途径:text一般用于mediumtext存储范围不符合时用来存储长文本操作,一般用户文章存储。

longtext数据类型

定义:longtext也属于变长字符串,最多可存储不超过4G字节的变长文本。
缺点:longtext也属于text系列数据类型,所以缺点和上述都是一致的。
使用途径:longtext最长长度可存储不超过4G的纯文本,但是一般情况下几乎不需要使用这种数据类型。

enum数据类型

定义:ENUM是一个字符串对象,可以通过ENUM限制字段的取值范围。如果插入数据时字段的取值并非可选值之一,则会空串或者NULL代替用户想要插入的值。enum集合的长度最多不超过64K。
缺点:不建议在数据库使用ENUM限制取值范围,因为坑其实挺多的,比如ENUM通过角标取值,但是角标从1开始,因为0留给空串了,再或者在ENUM中0和"0"是不一样的,如果将0当做角标去操作由于ENUM角标从1开始会报错,如果使用"0"去操作,最后插入的是空串,因为角标0是预留给空串的。所以说在数据库层次不建议使用ENUM限制字段取值范围。
使用途径:比如用户性别我们在建表时可以使用ENUM限制取值范围只能为男或女。

set数据类型

定义:数据列定义为set则可以存储集合,set集合最多不超过64k的长度。
set与enum的区别:enum定义数据列的取值范围,但是插入值永远只能有一个值。但是set可以设置数据列的取值范围,但是插入值时可以插入多个值。
使用途径:如果我们需要保存集合数据的时候可以将字段设置为set集合然后设置一个取值范围,然后插入时在取值范围内取多个值形成集合进行插入。。

日期/时间数据类型

Mysql有多种可以用来存储时间或日期的数据类型,比如我们可以使用date存储日期,可以使用year存储年份,可以使用time存储时间。可以使用datetime或者timestamp来存储日期和时间的组合,接下来我们来看下这几个日期/时间数据类型。

date数据类型

定义:用来存储日期,存储范围为'1000-01-01'到'9999-12-31'。
使用途径:可用于存储年月日的数据列,比如存储用户出生日期我们就可以使用date数据类型来进行存储。

time数据类型

定义:用来存储时间,不仅可以表示当天的时间,而且还可以用来表示两个时间的时间间隔。取值范围为'-838:58:59'到'838:59:59'。
使用途径:可能很多朋友看到这里怀疑自己的眼睛了,time取值范围'-838:58:59'到'838:59:59'?实际上这个取值范围是可以这么理解的:D HH:MM:SS,也就是你如果要存储时间间隔则会以时间间隔乘上小时作为小时进行存储。因为这个time使用比较复杂,所以我们在这里使用sql语句看看几种不同格式时间的插入效果:

  1. 简单的插入一个当前时间效果就是保存时间:

  1. 只有一个冒号则只保存时分,秒保存为00:

  1. 不存在冒号则时分保存为00,只保存秒:

  1. 时间前添加一个-2表示事件是在两天前开始进行,所以保存结果小时就是-2 * 24 + 1最后保存为-49:00:00:

  1. 时间前添加一个2表示事件是在两天后开始进行,所以保存结果小时就是2 * 24 + 1最后保存为49:00:00:

  1. 可以直接使用数字保存,也就是不输入空格与冒号:

year数据类型

定义:这个很简单,就是保存一个年份值。
使用途径:比如我们需要记录图书出版年份,则可以使用year数据类型。

datetime数据类型

定义:可以使用datetime来保存时间与日期组合格式,存储范围为1000-01-01 00:00:00 到 2039-01-19 11:14:07。一般有两种保存方式yyyy-mm-dd HH:MM:SS或者yyyymmddHHMMSS。
使用途径:这个很常用,比如订单下单时间或订单付款时间。

timestamp数据类型

定义:timestamp实际上功能和datetime差不多,但是范围更小,timestamp存储范围为1970-01-01 00:00:00 到 9999-12-31 23:59:59。
使用途径:这个很常用,比如订单下单时间或订单付款时间。

数值数据类型

刚才其实提到了数值数据类型有很多种,不同类型有不同的存储范围,同样所需的存储空间也是不一样的,数值类型都可以都是有符号,即可设置正负值。

tinyint数据类型

定义:存储整型数据,大小为1字节,如果保存有符号值则取值范围为-128到127,如果保存无符号值大小为取值范围为0到255。

smallint数据类型

定义:存储整型数据,大小为2字节,如果保存有符号值则取值范围为-32768到32767,如果保存无符号值大小为取值范围为0到65535。

mediumint数据类型

定义:存储整型数据,大小为3字节,如果保存有符号值则取值范围为-8388608到8388607,如果保存无符号值大小为取值范围为0到16777215。

int数据类型

定义:存储整型数据,大小为4字节,如果保存有符号值则取值范围为-2147683648到2147683647,如果保存无符号值大小为取值范围为0到4294967295。

bigint数据类型

定义:存储整型数据,大小为8字节,如果保存有符号值则取值范围为-2^63到2^63-1,如果保存无符号值大小为取值范围为0到2^64-1。

float数据类型

定义:存储浮点数据,大小为4字节,浮点型不能设置unsigned,取值范围为-1.175494351e - 38到1.175494351e - 38。

double数据类型

定义:存储浮点数据,大小为8字节,浮点型不能设置unsigned,精度相比float会更高,取值范围为-2.2250738585072014e-308到2.2250738585072014e-308。

decimal数据类型

定义:常用于存储精确的小数,可以设置存储的字节数和保留的小数位数。存储的字节数最大为65,默认为10,小数位数最大为30,默认为0。
使用途径:经常可以使用decimal保存金额或者积分值,因为金额一般保存都是固定小数位。

二进制数据类型

定义:二进制数据类型可存储任何数据,既可存储文本数据,也可存储图像或者多媒体等数据。

二进制数据类型其实相对其他数据类型比较少用,因为文件现在一般都是上传oss进行cdn加速,一共有四种数据类型:tinyblob,blob,mediumblob,longblob,这几个数据类型的区别在于存储范围。

  • tinyblob:存储长度最大为255字节。

  • blob:存储长度最大为64k。

  • mediumblob:存储长度最大为16M。

  • longblob:存储长度最大为4G。


缺点:
存储文件过大会影响数据库的性能。
欢迎关注公众号:程序猿周先森。文章原创于微信公众号,本平台不定时更新。

Mysql数据类型最细讲解的更多相关文章

  1. MySQL数据类型--日期时间

    一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是略懂略懂的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来 ...

  2. 详解MySQL数据类型

    原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言 很久没写文章,也有博友在我的有些文章中留言,希望我可以写一些文章,公司项 ...

  3. 【文章阅读】详解MySQL数据类型

    详解MySQL数据类型 - 五月的仓颉 - 博客园 http://www.cnblogs.com/xrq730/p/8446246.html 注:对于MySQL的数据类型做了详细的讲解,这是我看过的最 ...

  4. 🚴‍♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#

    二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...

  5. mysql 数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  6. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  7. MySQL数据类型的验证

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql)) default charset=utf8; ERROR (): ); use BLOB or T ...

  8. MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题

    MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MySQL 的时候,我还以为 int(3) ...

  9. 浅谈MySQL数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 一.数值类型 MySQL支持所有标 ...

随机推荐

  1. 【学习笔记】第三章 python3核心技术与实践--Jupyter Notebook

    可能你已经知道,Python 在 14 年后的“崛起”,得益于机器学习和数学统计应用的兴起.那为什么 Python 如此适合数学统计和机器学习呢?作为“老司机”的我可以肯定地告诉你,Jupyter N ...

  2. Linux 笔记 - 第十六章 LNMP 之(一) 环境搭建

    博客地址:http://www.moonxy.com 一.前言 LNMP 中的 N 指 Nginx,在静态页面的处理上,Nginx 较 Apache 更胜一筹:但在动态页面的处理上,Nginx 并不比 ...

  3. 第1次作业:使用Packet Tracer分析HTTP数据包

    个人信息:      •  姓名:李微微       •  班级:计算1811       •  学号:201821121001 一.摘要 本文将会描述使用Packet Tracer工具用到的网络结构 ...

  4. Android 本地化适配:RTL(right-to-left) 适配清单

    本文首发自公众号:承香墨影(ID:cxmyDev),欢迎关注. 一. 序 越来越多的公司 App,都开始淘金海外,寻找更多的机会.然而海外市场千差万别,无论是市场还是用户的使用习惯,都有诸多的不同. ...

  5. 第一次接触WebSocket遇到的坑以及感受

    要求用.net写一个服务,然后通过webscoket实现客户端与服务端之间的通信. 第一次知道.net还可以用来写服务,然后问题来了,服务是什么- -..下面图里的就是服务,可以停止暂停和启动. 我要 ...

  6. 【深入学习MySQL】MySQL的索引为什么使用B+树?

    前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引).本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明M ...

  7. CSS从大图中抠图然后显示其中的一部分

    相信大家在使用css时会遇到一个情况吧 就是一张大图片里面什么都有 各种图标都有 然而自己就是不太会使用其中的小图标 这是我最近的一次学习 首先上图 这么大一张图片 那么这么使其只显示一部分 并且为我 ...

  8. 原来python如此神奇

    一.优缺点分析 1.缺点: ① 数学问题的生成中只考虑了消除乘除法加括号的无效情况(例如3*(4+5)或(6*5)/2这样的计算),但没有去掉加减法加括号的无效情况(例如(4+(7+8))或(3-(2 ...

  9. java-不定项参数(可变参数)的作用和使用方式

    引言: 我们在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况.一般我们会用方法重载来解决问题: 1 //方法重载,解决参数个数不确定问题 2 public void method(); 3 ...

  10. Spring MVC 梳理 - 四种HandlerMapping

    总结 (1)SpringMVC导入jar包,配置web.xml 这些都是基础的操作. (2)四种HandlerMapping:DefaultAnnotationHandlerMapping;Simpl ...