1.mysql数据类型
mysql定义数据类型是对数据库优化非常重要的手段
mysql支持多种类型,常用的数据类型大致分为三大类:数值类型(包括整数类型、浮点类型和定点类型),日期时间类型,字符串类型,这次主要用于复习这三种类型。
2.数值类型
2.1整数类型
整数类型一共有5,包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
- TINYINT :一般用于枚举数据,比如系统设定取值范围很小且固定的场景。
- SMALLINT :可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。
- MEDIUMINT :用于较大整数的计算,比如车站每日的客流量等
- INT、INTEGER :取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。
- BIGINT :只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证券公司衍生产品持仓等
2.2浮点类型
浮点类型是用来处理小数的,当然整数也可以处理,此时可以理解成整数是小数部分为0的小数。
mysql中支持的浮点数类型分别是float,double,real
- float 表示单精度浮点数
- double 表示双精度浮点数
- real 默认就是double。如果你把sql模式设定为启用"REAL_AS_FLOAT",那么,MySQL就认为real是float。不过real 一般并不属于常用浮点类型
FLOAT 和 DOUBLE 这两种数据类型的区别是啥呢?
FLOAT 占用字节数少,大小为4字节,取值范围小;DOUBLE 占用字节数多,大小为8字节,取值范围也大。
注:float(6,2)表示4个整数两个小数,double(6,2)一样的。但这种方法在官方文档中已经明确不推荐使用,并且将来可能被移除。
2.3 定点数类型
MySQL中的定点数类型只有DECIMAL一种。
使用 DECIMAL(M,D) 的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65, 0<=D<=30,D<M。例如,定义DECIMAL(5,2)的类型,表示该列取值范围是-999.99~999.99。
DECIMAL(M,D) 的最大取值范围与 DOUBLE 类型一样,但是有效的数据范围是由M和D决定的。DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节。也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值范围可以更大一些。
3.日期类型
- YEAR 类型通常用来表示年
- DATE 类型通常用来表示年、月、日
- TIME 类型通常用来表示时、分、秒
- DATETIME 类型通常用来表示年、月、日、时、分、秒
- TIMESTAMP 类型通常用来表示带时区的年、月、日、时、分、秒,不同时区的人查看也会显示不同值
4.字符串类型
字符串总体上分为 CHAR 、 VARCHAR 、 TINYTEXT 、 TEXT 、MEDIUMTEXT 、 LONGTEXT 、 ENUM 、 SET 等类型。
CHAR和VARCHAR类型都可以存储比较短的字符串。
4.1 CHAR类型
CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在 右侧填充 空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。
定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。
4.2 VARCHAR类型
VARCHAR(M) 定义时, 必须指定 长度M,否则报错。
MySQL4.0版本以下,varchar(20):指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;MySQL5.0版本以上,varchar(20):指的是20字符。
检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。
4.3 TEXT类型
在MySQL中,TEXT用来保存文本类型的字符串,总共包含4种类型,分别为TINYTEXT、TEXT、 MEDIUMTEXT 和 LONGTEXT 类型。
在向TEXT类型的字段保存和查询数据时,系统自动按照实际长度存储,不需要预先定义长度。这一点和VARCHAR类型相同。
每种TEXT类型保存的数据长度和所占用的存储空间不同,如下:
由于实际存储的长度不确定, MySQL 不允许 TEXT 类型的字段做主键。遇到这种情况,你只能采用CHAR(M),或者 VARCHAR(M)。
原文链接:https://blog.csdn.net/qq_43459116/article/details/124135318