MYSQL 数据类型

发布于: 2020 年 11 月 29 日

MYSQL列数据类型分为3大类,分别是数值型、字符串型、日期/时间类型;每个大类分表包含不同的小类。下面一一记录:

数值型

整形

整形是指的不包含小数的数值,在MYSQL可以分为五种,分别是:tinyint、smallint、meduimint、int、bigint,平时经常用,但是大多数用的是int类型,由于搞不清楚原因,所以今天学习了下进行记录,以后此问题直接来这里查看即可。

tinyint(迷你整形):

tinyint使用一个字节,有符号范围是-128~127(-2^7~2^7-1),无符号范围是0~255(2^8-1),此字段可以用来使用存储状态、年龄等等数据。

smallint(小整形):

smallint使用两个字节,有符号范围是-32768~32767(-2^7~2^7-1),无符号范围-0~65535,可根据实际情况选择此字段。

mediumint(中整形):

使用3个字节,有符号范围是-8388608~8388607(-2^15~2^15-1),无符号位为0~16777215(2^16-1)。

int(标准整形):

使用4个字节,有符号范围是-2147483648~2147483647(-2^31~2^31-1),无符号位为0~429496295(2^32-1)。此字段使用较多,需根据实际情况使用,否则范围不够或浪费磁盘。

bigint(大整形):

使用8个字节,有符号位是-9223372036854775808~9223372036854775807(-2^63~2^63-1),无符号位:0~18446744073709551615(2^64-1),此字段一般使用大表的自增ID。

unsigned:

无符号标识,无符号指的是没有减号的数据,也就是没有负数。

显示长度:

查看表结构会看到如int(3)这样带括号并且里面带有一个数字,括号里面的长度指的是显示长度;显示长度没有特别含义,只是默认的告诉用户可以显示的形式而已。并不会控制数据本身的长度

显示宽度的意义:在当数据不够宽度的时候,会自动让数据变成对应的显示宽度(也就是括号内数字的长度),通常需要搭配一个前导0来增加宽度,不改变数值大小。当定义字段类型的时候增加zerofill修饰时,实际数据长度小于显示长度,则会使用0填充。目的是保持数据格式一致。被zerofill修饰的话模式为无符号数据(没有负数)。



小数型

小数型:带有小数点或者超出整形范围的数值类型。

在SQL中小数型分为浮点型和定点性。

浮点型:小数点浮动,精度有限,可能丢失精度。

定点性:小数点固定,精度固定,不会丢失精度。

浮点型:

浮点型数据是一种精度型数据:因为超过指定范围后,会丢失精度(四舍五入)。整数部分不可以超出范围也就是下面的M-D长度,超出长度后直接报错。小数部分可以超出长度,超出长度部分会自动四舍五入掉。但是浮点数如果因为系统进位导致整数部分超出指定的长度,那么系统也允许成立

浮点型:理论分为两种精度

Float:单精度,占用4个字节,精度范围大概为7位左右。直接使用float表示没有小数部分;float(M,D):M代表总长度,D代表小数部分长度,整数部分为M-D,一旦超出M位的话会出现精度丢失。

Double:双精度,占用8个字节,精度范围大概为15为左右。

定点型

定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分可能丢失(理论上小数部分也不会丢失精度)。

插入数据:定点数的整数部分一定不能超出长度(进位不可以),小数部分的长度可以随意超出(系统自动四舍五入)。

浮点数如果进位导致整数部分长度溢出没有问题,但是定点数不行。数据要求精确一定要使用定点数。如果数据比较错乱或比较大的话就可以使用浮点数。



时间日期类型

Datetime:时间日期,格式是YYYY-mm-dd HH:ii:ss,表示是范围从1000到9999年,有0值:0000-00-00 00:00:00。

Date:日期,是datetime的date部分。

Time:时间(段),指定的某个区间之间,-时间到+时间。

Timestamp:时间戳,其实也不是时间戳,只是从1970年开始的YYYY-mm-dd HH:ii:ss格式,与Datetime一致。

Year,年份,两种形式,year(2)和year(4):1901-2156



注意time和year

Timestamp字段:只要当前所在的记录被更新,该字段一定会自动更新成当前时间。



字符串类型

在SQL中,将字符串类型分为6类,char、varchar、text、blob、enum和set。

定长字符串

定长字符串:char(),磁盘(二维表)在定义结构的时候就已经确定了最终数据的存储长度。

char(L):L代表length,代表可以存储的长度,单位为字符,最大长度值可以为255.(字符大于等于一个字节)。

cha(4):在UTF8环境下,需要4 * 3 = 12个字节。

变长字符串

变长字符串:varchar,在分配空间时,按照最大的空间分配,但是最终用了多少,是根据具体的数据来定的。

varchar(L):L代表字符长度,理论长度是65536个字符,但是会多出1到2个字节用来存储实际长度。但是实际上如果长度超过了255,既不用定长也不用变长字符串,而是用文本字符创text存储

varchar(10):的确存了10个汉字,utf8环境下使用了10 * 3 + 1= 31个字节。

存储了3个汉字,3 *3 + 1 = 9个字节。

文本字符串

如果数据量非常大,通常说超过了255个字符就会使用文本字符串存储。

文本字符串根据存储的数据格式进行分类:test和blob

test:存储本子(二进制数据实际上都是存储路径)

blob:存储二进制数据,如图片(通常不用,太占用空间)

定长与变长字符串的区别

定长的磁盘空间比较浪费,但是效率高:如果数据基本上确定长度都一样,就是用定长,如身份证、电话号码、手机号码。

变长的磁盘空间比较节省,但是效率低,如果数据不能确定长度(不同数据有变化)如姓名,家庭住址等。

发布于: 2020 年 11 月 29 日阅读数: 21
用户头像

好记性不如烂笔头 2018.05.04 加入

还未添加个人简介

评论

发布
暂无评论
MYSQL数据类型