详细叙述MySQL中所有数据类型(以MySQL 8.0 为例)


MYSQL支持多种类型,大致分为三类,数值、日期/时间、字符串(字符)类型。

数值型

类型大小范围(有符号)范围(无符号)用途
tinyint1 Bytes(-128,127)(0,255)小整数值
smallint2 Bytes(-32768,32768)(0,65535)大整数值
mediumint3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
int 或 integer4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
bigint8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
float4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度,浮点数值
double8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度,浮点数值
decimal对于decimal(M,D),如果M>D,为M+2,否则为D+2。依赖M和D依赖M和D小数值

Attention:

  1. int类型,占用字节数为4byte,学过计算机原理的同学应该知道,字节(byte)并非是计算机存储的最小单位,还有比字节(byte)更小的单位, 也就是位(bit),一个位就代表一个0或1;8个位组成一个字节;一般字节用大写B来表示byte,位用小写b来表示bit。(计算机存储单位的换算: 1B=8b 1KB=1024B 1MB=1024KB)那么根据int类型允许存储的字节数是4个字节,我们就能换算出int unsigned(无符号)类型的能存储的最小值为0, 最大值为4294967295(即4B=32b, 最大值即为32个1组成,即4294967295换算成二进制则是32个1)。
  2. int()中M默认值为11,int() unsigned中M的默认值为10, int(1)、int(2)、int(4)、int(8),不管是M是多少,int类型都是占4个字节,存储范围也一样。例如插入123456789时都可以,虽然超过指定长度,查询也能显示出来。利用zerofill可以显示出int(M)的不同,当使用ZEROFILL时,默认会自动加unsigned(无符号)属性。比如 INT(3) ZEROFILL,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0。zerofill比较常用的场景是月份或日期前补0。
  3. float和double两者主要区别就是精度,即小数点后保存位数多少。
    • 经测试float默认只保存6位(除去小数点),如果超过6位,则四舍五入,所以float存储的数据是不精确的,只是近似值。double能保存16位左右,测试不太稳定。
    • float默认大小为24位数字,精度大约7位数字(经测试为6位),当设置M大小大于24时,自动转换为double类型;同时设置M和D时不进行自动转换,如float(25,2)类型就是float(25,2)。
    • float(M,D)中M表示所有数字长度,D表示小数点后的数字长度,float的M范围为1~255,D最大限制不能超过30。double(M,D)与float(M,D)用法类似。
  4. decimal(M,D),M的范围是1-65,默认值是10,表示所有有效数字长度,D的范围是0-30,默认值是0,表示小数点后的数字长度。M≥D,例如decimal(5,2)该字段存储的范围是-999.99 ~ 999.99。小数位超出会截断,产生告警,并按四舍五入处理。

字符型

类型大小用途
char0~255 Bytes定长字符串
varchar0~65535 Bytes变长字符串
tinyblob0~255 Bytes不超过255个字符的二进制字符串
tinytext0~255 Bytes短文本字符串
blob0-65 535 Bytes二进制形式的长文本数据
text0-65 535 Bytes长文本数据
mediumblob0-16 777 215 Bytes二进制形式的中等长度文本数据
mediumtext0-16 777 215 Bytes中等长度文本数据
longblob0-4 294 967 295 Bytes二进制形式的极大文本数据
longtext0-4 294 967 295 Bytes极大文本数据

Attention:

  1. char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。char默认为1,varchar无默认,必须设置为varchar(n)。创建类型char(10),插入值’abc’,占用空间一样是10个字符,即剩余7个字符用空格填充,而varchar(10),插入值’abc’,最大占用空间为10个字符,实际占用空间是值字符串长度+1或2。
  2. binary 和 varbinary 类似于 char 和 varchar,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。
  3. BLOB 是一个二进制大对象,可以容纳可变数量的数据。text 不可以有默认值,其最大长度是 2 的 16 次方-1。

日期/时间型

类型大小范围格式用途
date3 Bytes1000-01-01/9999-12-31YYYY-MM-DD日期值
time3 Bytes‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
year1 Bytes1901/2155YYYY年份值
datetime8 Bytes1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp4 Bytes1970-01-01 00:00:00/2038,结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值