Mysql数据类型最细讲解
<p><strong>文章原创于公众号:步伐猿周先森。本平台不定时更新,喜欢我的文章,接待关注我的微信公众号。</strong></p><p><div align="center"></div></p>
<p>数据库中事件是最告急的概念之一,以是上篇着重谈了谈数据库中事件的使用,而且举了实例如安在现实开辟中去使用事件举行数据库利用。而我们也知道,Mysql中列的数据类型很多,而大多数人大概只是知道这些差别的数据类型怎么去使用,以是本篇文章主要具体谈谈Mysql中各种差别的数据类型。</p>
<p><strong>Mysql数据类型分类</strong></p>
<p>在Mysql中常用数据类型一共有四种字符串数据类型、日期/时间数据类型、数值数据类型以及二进制数据类型。</p>
<ul>
<li><p>字符串数据类型:主要包罗下列几种数据类型:char,varchar,tinytext,mediumtext,text,longtext,enum,set。</p></li>
<li><p>日期/时间数据类型:主要包罗下列几种数据类型:date,time,datetime,timestamp,year。</p></li>
<li><p>数值数据类型:主要包罗下列几种数据类型:tinyint,smallint,mediumint,int,bigint,float,double,decimal。</p></li>
<li><p>二进制数据类型:主要包罗下列几种数据类型:tityblob,blob,mediumblob,longblob。</p></li>
</ul>
<p><strong>束缚条件</strong></p>
<p>在开始正式教学数据类型之前,我们须要先了解下怎样给字段添加一些基本的束缚条件。Mysql可以给字段添加的常用束缚条件有:unsigned,zerofill,not null,default,primary key,auto_increment,unique key,foreign key。</p>
<ul>
<li><p>unsigned:无符号类型,加上此束缚值无法取负数,只能作用于数值类型数据列。</p></li>
<li><p>zerofill:当数据表现长度不敷时在数据前面补0至指定长度,字段会主动添加unsigned束缚。</p></li>
<li><p>not null:这个很好明白,给字段添加非空束缚。</p></li>
<li><p>default:假如插入数据没有指定值,则使用默认值。</p></li>
<li><p>primary key:给字段添加主键束缚,一个表只能有一个主键,但是可以和其他字段形成组合主键,一样平常与auto_increment束缚一并使用。</p></li>
<li><p>auto_increment:只能作用于数值类型,字段可以主动递增,默认从1开始。一样平常和primary key配合使用。</p></li>
<li><p>unique key:设置唯一束缚,则字段的值不能出现重复数据,null除外。</p></li>
<li><p>foreign key:外键束缚,包管数据完备性和唯一性,以及多表联表利用。</p></li>
</ul>
<p><strong>字符串类型</strong></p>
<p><strong>char数据类型</strong></p>
<p><strong>定义:</strong>可以定义一个固定长度的字符串,长度范围在1-255个字符之间,长度必须在表创建时指定,否则会默认定义为char(1),在存储时字符串假如未到达指定的长度则会添补空格到指定长度。<br />
<strong>使用途径:</strong>当我们须要涉及一些长度固定的数据列时可以使用char数据类型,好比手机号使用char(11),身份证号使用char(18),用户性别使用char(3)。</p>
<p><strong>varchar数据类型</strong></p>
<p><strong>定义:</strong>可以定义一个可变长度的字符串,理论情况下可存储最多255个字节的数据。但是假如创建时指定varchar(x),则只能存储不凌驾x个字符的数据。<br />
<strong>对比char类型区别:</strong>现实上我们更经常使用的还是varchar数据类型,由于char类型不管存储数据的长度多少,都会占用定义的字节数,但是varchar只会占用现实字符串长度+1个字节。但是char查询效率相比于varchar会更高,以是存储固定长度时我们可以优先选择char数据类型。<br />
<strong>使用途径</strong>:一样平常长度不固定的数据列就可以使用varchar类型,好比姓名,一样平常中文名字2到5字,以是我们定义为varchar(15)。</p>
<p><strong>tinytext数据类型</strong></p>
<p><strong>定义:</strong>tinytext也属于变长字符串,最多可存储不凌驾255字节的变长文本。<br />
<strong>缺点:</strong>tinyint数据类型定义时不允许设置默认值,在检索也不存在巨细写转换,而且效率低于char以及varchar。以是一样平常情况下比较少使用该数据类型。</p>
<p><strong>mediumtext数据类型</strong></p>
<p><strong>定义:</strong>mediumtext也属于变长字符串,最多可存储不凌驾16k字节的变长文本。<br />
<strong>缺点:</strong>mediumtext和tinytext同属于text系列数据类型,以是缺点都是一致的。<br />
<strong>使用途径:</strong>mediumtext一样平常用于varchar存储范围不符适时用来存储长文本利用,一样平常情况下使用mediumtext存储长文本就可以满足利用。</p>
<p><strong>text数据类型</strong></p>
<p><strong>定义:</strong>text也属于变长字符串,最多可存储不凌驾64k字节的变长文本。<br />
<strong>缺点:</strong>text也属于text系列数据类型,以是缺点和上述都是一致的。<br />
<strong>使用途径:</strong>text一样平常用于mediumtext存储范围不符适时用来存储长文本利用,一样平常用户文章存储。</p>
<p><strong>longtext数据类型</strong></p>
<p><strong>定义:</strong>longtext也属于变长字符串,最多可存储不凌驾4G字节的变长文本。<br />
<strong>缺点:</strong>longtext也属于text系列数据类型,以是缺点和上述都是一致的。<br />
<strong>使用途径:</strong>longtext最长长度可存储不凌驾4G的纯文本,但是一样平常情况下几乎不须要使用这种数据类型。</p>
<p><strong>enum数据类型</strong></p>
<p><strong>定义:</strong>ENUM是一个字符串对象,可以通过ENUM限制字段的取值范围。假如插入数据时字段的取值并非可选值之一,则会空串大概NULL代替用户想要插入的值。enum聚集的长度最多不凌驾64K。<br />
<strong>缺点:</strong>不发起在数据库使用ENUM限制取值范围,由于坑其实挺多的,好比ENUM通过角标取值,但是角标从1开始,由于0留给空串了,再大概在ENUM中0和"0"是不一样的,假如将0当做角标去利用由于ENUM角标从1开始会报错,假如使用"0"去利用,末了插入的是空串,由于角标0是预留给空串的。以是说在数据库层次不发起使用ENUM限制字段取值范围。<br />
<strong>使用途径:</strong>好比用户性别我们在建表时可以使用ENUM限制取值范围只能为男或女。</p>
<p><strong>set数据类型</strong></p>
<p><strong>定义:</strong>数据列定义为set则可以存储聚集,set聚集最多不凌驾64k的长度。<br />
<strong>set与enum的区别:</strong>enum定义数据列的取值范围,但是插入值永久只能有一个值。但是set可以设置数据列的取值范围,但是插入值时可以插入多个值。<br />
使用途径:假如我们须要保存聚集数据的时候可以将字段设置为set聚集然后设置一个取值范围,然后插入时在取值范围内取多个值形成聚集举行插入。。</p>
<p><strong>日期/时间数据类型</strong></p>
<p>Mysql有多种可以用来存储时间或日期的数据类型,好比我们可以使用date存储日期,可以使用year存储年份,可以使用time存储时间。可以使用datetime大概timestamp来存储日期和时间的组合,接下来我们来看下这几个日期/时间数据类型。</p>
<p><strong>date数据类型</strong></p>
<p><strong>定义:</strong>用来存储日期,存储范围为'1000-01-01'到'9999-12-31'。<br />
<strong>使用途径:</strong>可用于存储年月日的数据列,好比存储用户出生日期我们就可以使用date数据类型来举行存储。</p>
<p><strong>time数据类型</strong></p>
<p><strong>定义:</strong>用来存储时间,不但可以表现当天的时间,而且还可以用来表现两个时间的时间隔断。取值范围为'-838:58:59'到'838:59:59'。<br />
使用途径:大概很多朋友看到这里怀疑本身的眼睛了,time取值范围'-838:58:59'到'838:59:59'?现实上这个取值范围是可以这么明白的:D HH:MM:SS,也就是你假如要存储时间隔断则会以时间隔断乘上小时作为小时举行存储。由于这个time使用比较复杂,以是我们在这里使用sql语句看看几种差别格式时间的插入结果:</p>
<ol>
<li>简朴的插入一个当前时间结果就是保存时间:</li>
</ol>
<p><div align="center"></div></p>
<ol>
<li>只有一个冒号则只保存时分,秒保存为00:</li>
</ol>
<p><div align="center"></div></p>
<ol>
<li>不存在冒号则时分保存为00,只保存秒:</li>
</ol>
<p><div align="center"></div></p>
<ol>
<li>时间前添加一个-2表现事件是在两天前开始举行,以是保存结果小时就是-2 * 24 + 1末了保存为-49:00:00:</li>
</ol>
<p><div align="center"></div></p>
<ol>
<li>时间前添加一个2表现事件是在两天后开始举行,以是保存结果小时就是2 * 24 + 1末了保存为49:00:00:</li>
</ol>
<p><div align="center"></div></p>
<ol>
<li>可以直接使用数字保存,也就是不输入空格与冒号:</li>
</ol>
<p><div align="center"></div></p>
<p><strong>year数据类型</strong></p>
<p><strong>定义:</strong>这个很简朴,就是保存一个年份值。<br />
<strong>使用途径:</strong>好比我们须要记载图书出书年份,则可以使用year数据类型。</p>
<p><strong>datetime数据类型</strong></p>
<p><strong>定义:</strong>可以使用datetime来保存时间与日期组合格式,存储范围为1000-01-01 00:00:00 到 2039-01-19 11:14:07。一样平常有两种保存方式yyyy-mm-dd HH:MM:SS大概yyyymmddHHMMSS。<br />
<strong>使用途径:</strong>这个很常用,好比订单下单时间或订单付款时间。</p>
<p><strong>timestamp数据类型</strong></p>
<p><strong>定义:</strong>timestamp现实上功能和datetime差不多,但是范围更小,timestamp存储范围为1970-01-01 00:00:00 到 9999-12-31 23:59:59。<br />
<strong>使用途径:</strong>这个很常用,好比订单下单时间或订单付款时间。</p>
<p><strong>数值数据类型</strong></p>
<p>刚才其实提到了数值数据类型有很多种,差别类型有差别的存储范围,同样所需的存储空间也是不一样的,数值类型都可以都是有符号,即可设置正负值。</p>
<p><strong>tinyint数据类型</strong></p>
<p><strong>定义:</strong>存储整型数据,巨细为1字节,假如保存有符号值则取值范围为-128到127,假如保存无符号值巨细为取值范围为0到255。</p>
<p><strong>smallint数据类型</strong></p>
<p><strong>定义:</strong>存储整型数据,巨细为2字节,假如保存有符号值则取值范围为-32768到32767,假如保存无符号值巨细为取值范围为0到65535。</p>
<p><strong>mediumint数据类型</strong></p>
<p><strong>定义:</strong>存储整型数据,巨细为3字节,假如保存有符号值则取值范围为-8388608到8388607,假如保存无符号值巨细为取值范围为0到16777215。</p>
<p><strong>int数据类型</strong></p>
<p><strong>定义:</strong>存储整型数据,巨细为4字节,假如保存有符号值则取值范围为-2147683648到2147683647,假如保存无符号值巨细为取值范围为0到4294967295。</p>
<p><strong>bigint数据类型</strong></p>
<p><strong>定义:</strong>存储整型数据,巨细为8字节,假如保存有符号值则取值范围为-2^63到2^63-1,假如保存无符号值巨细为取值范围为0到2^64-1。</p>
<p><strong>float数据类型</strong></p>
<p><strong>定义:</strong>存储浮点数据,巨细为4字节,浮点型不能设置unsigned,取值范围为-1.175494351e - 38到1.175494351e - 38。</p>
<p><strong>double数据类型</strong></p>
<p><strong>定义:</strong>存储浮点数据,巨细为8字节,浮点型不能设置unsigned,精度相比float会更高,取值范围为-2.2250738585072014e-308到2.2250738585072014e-308。</p>
<p><strong>decimal数据类型</strong></p>
<p><strong>定义:</strong>常用于存储准确的小数,可以设置存储的字节数和保留的小数位数。存储的字节数最大为65,默以为10,小数位数最大为30,默以为0。<br />
<strong>使用途径:</strong>经常可以使用decimal保存金额大概积分值,由于金额一样平常保存都是固定小数位。</p>
<p><strong>二进制数据类型</strong></p>
<p><strong>定义:</strong>二进制数据类型可存储任何数据,既可存储文本数据,也可存储图像大概多媒体等数据。</p>
<p>二进制数据类型其实相对其他数据类型比较少用,由于文件如今一样平常都是上传oss举行cdn加速,一共有四种数据类型:tinyblob,blob,mediumblob,longblob,这几个数据类型的区别在于存储范围。</p>
<ul>
<li><p>tinyblob:存储长度最大为255字节。</p></li>
<li><p>blob:存储长度最大为64k。</p></li>
<li><p>mediumblob:存储长度最大为16M。</p></li>
<li><p>longblob:存储长度最大为4G。</p></li>
</ul>
<p><strong><br />
缺点:</strong>存储文件过大会影响数据库的性能。<br />
接待关注公众号:步伐猿周先森。文章原创于微信公众号,本平台不定时更新。</p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/niyueling/p/11727562.html" target="_blank">https://www.cnblogs.com/niyueling/p/11727562.html</a>
页:
[1]