5.7 mysql 数据类型

这篇博客详细介绍了MySQL中的数据类型,包括字符串类型如char、varchar、text和blob,数值类型如整数和小数,以及日期类型。对于字符串类型,特别讨论了不同类型的存储方式和字符限制,对于数值类型,提到了整数的长度和小数的存储形式,而对于日期类型,区分了datetime和timestamp的差异,并探讨了它们的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串类型

char

char(m) m为字符数,存储占据:m*w字节【w是字符集中最大长度字符所需的字节数】,长度不够m的补空格【检索时会把自动尾随的空格删除】, m=[1,255] ,比varchar查找速度快,因为知道占几个字节

varchar

varchar(m) 最多m个字符数,存储时为L个字符(真实长度)所占字节+存储长度的1字节/2字节(L个字符所占字节<=255则存储长度为1个字节,>255时存储长度为两个字节)。
算上存储长度的自己,存储时最多占据字节为65535【取绝于最大行大小】

字符类型为gbk,则每个字符最多占2个字节,m<=32766
字符类型为utf8k,则每个字符最多占3个字节,m<=21845
字符类型为utf8mb4,则每个字符最多占4个字节,m<=16383

text blob

blob是二进制字符串,text是非二进制字符串
各有四种类型,类型之间仅有容纳长度不同

tinytext tinyblob

字符数<= 2 8 − 1 2^8-1 281
存储所占据字节:真实字符数所占字节+1个字节

text blob

字符数<= 2 16 − 1 2^{16}-1 2161
存储所占据字节:真实字符数所占字节+2个字节

mediumblob mediumtext

字符数<= 2 24 − 1 2^{24}-1 2241
存储所占据字节:真实字符数所占字节+3个字节

bigtext bigblob

字符数<= 2 32 − 1 2^{32}-1 2321
存储所占据字节:真实字符数所占字节+4个字节

html的文章保存方式

bigtext

数值类型

整数

tinyint(1) 是boolean类型
tinyint(2) unsigned 从0开始的byte【java中】
bigint java中的long型
类型字节signed_minsigned_maxunsigned_minunsigned_max
tinyint1- 2 7 2^7 27 2 7 2^7 27-10 2 8 2^8 28-1
smallint2- 2 15 2^{15} 215 2 15 2^{15} 215-10 2 16 2^{16} 216 -1
mediumint3- 2 23 2^{23} 223 2 23 2^{23} 223-10 2 24 2^{24} 224 -1
int4- 2 31 2^{31} 231 2 31 2^{31} 231-10 2 32 2^{32} 232 -1
bigint8- 2 63 2^{63} 263 2 63 2^{63} 263- 10 2 64 2^{64} 264 -1

长度:tinyint samllint mediumint int bigint 都一样

int(m) m不会影响存储时所占的字节,都是以4字节存储。
m与zerofille结合时为:最短显示的长度,如int(4) ,输入10,会以0010的形式存储
eg:

`id` int(4) unsigned zerofill,

在这里插入图片描述

小数

浮点数

浮点数:存储近似值。
浮点值是近似值而不是作为精确值存储的,如float(3,1) 32.09->32.1,导致在比较或运算时,会出错。

  • 存储
    float 4字节 单精度
    float§ p=[0,24] 4字节
    float§ p=[25,53] 双字节
    double 8字节 双精度

定点数

定点数:存储精确值,如:货币金额。

  • 语法
    decimal(m,d) m精度,总位数 m=[1,65]; d小数位数,d=[1,30]&d<m
    默认decimal(10,0)
    decimal(m)默认为decimal(m,0)
  • 表示范围
    decimal(4,1) 为[-999.9, 999.9]
    decimal(4,1) unsigned为[0,999.9]
  • 存储:非固定字节=4*int(m/9)+下面表格中字节
    二进制格式存储。整数和小数部分分别存储。
位数需要字节数
00
1–21
3–42
5–63
7–94
DECIMAL(20,6)列具有十四个整数数字和六个小数位数。整数位中的 9 位需要 4 个字节,其余 5 位需要 3 个字节。六个小数位需要 3 个字节

日期类型

year1字节 yyyy
date 年月日 3字节 yyyy-mm-dd
time 时分秒 3字节 hh:mm:ss
datetime 年月日时分秒 5字节 yyyy-mm-dd hh:mm:ss 更适合时间长久的项目
TIMESTAMP 年月日时分秒 4字节 yyyy-mm-dd hh:mm:ss 更适合跨时区

datetime和timestamp区别

	1. TIMESTAMP,存入格林尼治标准时间,把值从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。适合跨时区的业务。
	2. timestamp 所能存储的时间范围为:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。
		datetime 所能存储的时间范围为:'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。

应用

`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值