MySQL相关数据类型

本文详细介绍了MySQL中数值类型,包括整型、浮点型和定点数,强调了精度与存储范围的关系。接着讨论了字符串类型,如char、varchar、text和blob的差异。此外,还涵盖了日期时间类型,如date、time、datetime和timestamp的使用。最后,提到了复合数据类型enum和set的特性和应用场景。内容深入浅出,适合数据库设计和开发者阅读。
摘要由CSDN通过智能技术生成
一、数值类型

MySQL支持所有标准SQL中的数值类型:
包括严格数据类型(integer(int)、smallint、decimal、numeric
近似数值数据类型(float、real、double
在此基础上扩展增加(tinyint、mediumint、bigint)3种长度不同的整型,增加了bit位类型,用来存放位数据

数值类型字节有符号存储范围无符号存储范围描述
tinyint 1byte (-128,127)(0,255)小整数值
smallint 2byte(-32768,32767)(0,65535)大整数值
mediumint 3byte(-2^23,(2^23)-1)(0,16 777 215)大整数值
int(integer)4byte(-2^31,(2^31)-1)(0,4294967295)大整数值
bigint 8byte(-2^63,(2^63)-1)(0,18446744073709551615)极大整数值
float(m,d)4byte -3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38m是数字总位数,d是小数点后的位数;若m和d别省略,根据硬件允许的限制来保存值 单精度浮点数值
double8byte-1.7976931348623157E+308到-2.22507385854072014E-308、0和2.22507385854072014E-308到1.7976931348623157E+308双精度浮点数值
decimal(m,d)m指定小数点左边和右边可以存储十进制数字的最大个数,最大精度为38;d指定小数点右边可以存储的十进制数字的最大个数,小数位数必须是0~m的值,默认小数位数是0定点数值

存储范围越小,精度越高;存储数值范围越大,精度越不准确
对于要求精度及固定小数点位数的数值存储,则采用decimal(numeric)好处在于可以自定义小数位数且精度高
若数值范围巨大,则只能用float(real)类型,但一般不提倡使用

二、字符串类型

MySQL数据库提供6种基本字符串类型:
char、varchar、binary、varbinary、blob、text
用来存放字符,字符串、文本、二进制字符串数据

类型大小描述
char0-255字节定长字符串
varchar0-65535字节变长字符串
tinyblob0-255字节不超过255个字符的二进制字符串
tinytext0-255字节短文本字符串
blob0-65535字节二进制形式的长文本数据
text0-65535字节长文本数据
mediumblob0-16777215字节二进制形式的中等长度文本数据
mediumtext0-16777215字节中等长度文本数据
longblob0-4294967295字节二进制形式的极大文本数据
char0-4294967295字节极大文本数据
varbinary(m)允许长度为0~m个字节的定长字符串,值的长度+1个字节
binary(m)允许长度为0~m个字节的定长字符串

1、varchar和text区别:
(1)varchar可指定n,text不能指定;
(2)内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节;
(3)text类型不能有默认值;
(4)varchar可直接创建索引,text创建索引需指定前多少个字符;
(5)varchar的查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
2、text和blob的区别:
(1)blob和text的存储方式不同:text以文本方式存储,blob以二进制方式存储;
(2)text英文存储区分大小写,blob不区分;
(3)blob存储的数据只能整体读出;
(4)text可以指定字符集,blob不用指定字符集。
3、binary和varbinary类似于char和varchar
不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值

三、日期时间类型

MySQL数据库提供5种日期时间类型:
date、time、year、datetime、timestamp
用来存储和日期时间相关的数据,每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值

类型字节范围格式描述
date4byte1000-01-01~9999-12-31YYYY-MM-DD日期值
time3byte‘-838:59:59’~‘838:59:59’HH:MM:SS时间值
year1byte1901~2155YYYY年份值
datetime8byte1000-01-01 00:00:00~9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS日期时间组合值
timestamp4byte1970-01-01 00:00:00~2037年某时YYYY-MM-DD HH:MM:SS时间戳

注意:
(1)关于timestamp时间戳,当值大于2037年则会抛出异常:
在这里插入图片描述

四、复合数据类型

MySQL数据库提供2种复合数据类型:
enum、set:enum单选字符串数据类型和set多选字符串数据类型。
一个enum类型只允许从一个集合中取得一个值;而set类型允许从一个集合中取得任意多个值。

类型格式存储大小
enumenum(“value1”,“value2”,“value3”,…)1byte:(1-255个值);2byte:(256-65535个值)
setset(“value1”,“value2”,“value3”,…)1byte:(1-8个值);2byte:(9-16个值);3byte:(17-24个值);4byte:(25-32个值);8byte:(33-64个值)

enum格式: enum(“value1”,“value2”,“value3”,…)
实际上,enum的选项都对应一个数字,依次是1,2,3,4,5…最多有65535个选项,使用的时候,可以使用选项的字符串格式,也可以使用对应的数字

set的格式: set(“value1”,“value2”,“value3”,…)
set的每个选项值对应一个数字,依次是1,2,4,8,16…最多有64个选项,使用的时候,可以使用set选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shexianyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值