**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数据类型来进行存储。
**year数据类型**
\*\*定义:\*\*这个很简单,就是保存一个年份值。
\*\*使用途径:\*\*比如我们需要记录图书出版年份,则可以使用year数据类型。
**datetime数据类型**
\*\*定义:\*\*可以使用datetime来保存时间与日期组合格式,存储范围为1000-01-01 00:00:00 到 9999-12-31 23:59:59。一般有两种保存方式yyyy-mm-dd HH:MM:SS或者yyyymmddHHMMSS。
\*\*使用途径:\*\*这个很常用,比如订单下单时间或订单付款时间。
**timestamp数据类型**
\*\*定义:\*\*timestamp实际上功能和datetime差不多,但是范围更小,timestamp存储范围为1970-01-01 00:00:00 到 2037-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字节,如果保存有符号值则取值范围为-263到263-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。
\*\*
缺点:\*\*存储文件过大会影响数据库的性能。
- 序言
- 从业感悟
- 常用名词
- HTML
- JS
- ES6新特性
- jquery和vue对比
- 彻底理解this
- JQuery添加自定义函数
- js的实现
- 原始值和引用值
- MYSQL
- 简介
- 术语
- 特点
- 范式
- 数据类型1
- 数据类型2
- 编码
- 权限管理
- 事务
- mvvc
- 引擎
- MyISAM与InnoDB区别
- 索引类型
- 锁
- 死锁
- 分层架构
- 执行计划
- join原理
- 高可用
- 日志类型
- 分库分表
- 中间件
- 服务器
- 操作系统
- 信号量 锁 队列
- PHP
- composer加载原理
- composer基础知识
- 自动加载函数
- composer加载代码
- composer 自动加载
- 内存管理
- PHP执行流程
- cgi,fastCgi,php-fpm
- HTTP
- 错误码
- 跨域请求
- 面试
- 安全
- HTTP劫持
- 设计模式
- 如何正确的使用设计模式
- 单例模式
- 原型模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 设计原则
- 算法
- PHP短标签