Mysql基础篇(3)—— MySQL数据库类型

文章详细介绍了MySQL中的各种数据类型,包括整数类型如TINYINT、INT、BIGINT的范围,浮点数类型的FLOAT和DOUBLE的精度问题,定点数DECIMAL的精确性,位类型BIT,日期与时间类型如DATE、TIME和TIMESTAMP的特点,以及文本字符串、BLOB、JSON和空间类型的应用和注意事项。
摘要由CSDN通过智能技术生成

整数类型

类型名占用字节有符号范围无符号范围(UNSIGNED)
TINYINT1-128~1270~255
SMALLINT2-32768~327670~65535
MEDIUMINT3-8388608~83886070~16777215
INT、INTEGER4-2147483648~21474836470~4294967295
BIGINT8-9223372036854775808~92233720368547758070~18446744073709551615

浮点类型

类型名占用字节有符号范围无符号范围(UNSIGNED)
FLOAT4(-3.4E+38,-1.17E-38),0,(1.17E-38,3.4E+38)0,(1.17E-38,3.4E+38)
DOUBLE8(-1.7E+308,-2.2E-308),0,(2.2E-308,1.7E+308)0,(2.2E-308,1.7E+308)

ps:

  • mysql存储浮点数的格式为:符号(S)、尾数(M)和阶码(E)。有无符号,正数的范围是一样的

  • 尾数是二进制存储的,除了以5结尾的小数,其他的都会有精度上的缺失。所以浮点数不要用“=”来判断两个数是否相等

  • 不建议定义精度M和标度D

  • 整数部分超出范围会直接报错,小数部分超出范围会四舍五入

定点数类型

DECIMAL

使用DECIMAL(M,D)方式方式表示高精度小数。0<=M<=65,0<=D<=30,D<M。DECIMAL的存储空间为M+2。

底层是以字符串的形式存储的,这就决定了它是精确的。

不指定MD,默认是DECIMAL(10, 0)。

定点数和浮点数

定点数精确但是通常情况占用空间相对较大(M大于2/6的时候就大于float/double的占用大小了)。

相反,浮点数通常情况下相对于定点数来说占用空间小,范围大但是不精确。

位类型

类型名长度长度范围占用字节
BIT(M)M,默认11<=M<=64约为(M + 7) / 8 个字节

### 日期与时间类型

类型名介绍占用字节格式最小值最大值
YEAR1YYYY或YY19012155
TIME时间3HH:MM:SS-838:59:59838:59:59
DATE日期3YYYY-MM-DD1000-01-019999-12-03
DATETIME日期时间8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP日期时间4YYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 UTC2038-01-19 03:14:07UTC

ps:

  • TIMESTAMP存储数据的时候会转换成距离1970-01-01 00:00:01 UTC的毫秒值,查询的时候会根据查询时候所在的时区将毫秒值转换成时间,因此不同时区查看看一个数据会得到不同的结果。
  • TIMESTAMP类型的日期比较相对于DATATIME来说较快。

文本字符串类型

类型字符长度长度范围(存储字节范围)占用存储空间
CHAR(M)M0<=M<=255M字符所占用的字节
VARCHAR(M)M0<=M<=65535M字符所占用的字节+1个字节
TINYTEXTL0<=L<=255L字符所占用的字节+2个字节
TEXTL0<=L<=65535L字符所占用的字节+2个字节
MEDIUMTEXTL0<=L<=16777215L字符所占用的字节+3个字节
LONGTEXTL0<=L<=4294967295L字符所占用的字节+4个字节
ENUML1<=L<=655351或2个字节
SETL0<=L<=641,2,3,4或8个字节
CHAR和VARCHAR
类型特点空间上时间上试用场景
CHAR(M)固定长度浪费存储空间效率高存储不大,速度要求高
VARCHAR(M)可变长度节省存储空间效率低非CHAR的情况

具体存储引擎的情况:

  • MyISAM:最好用CHAR,这样使得整个表静态化,以空间换时间
  • MEMORY:底层都是用固定长度去存储数据,用啥都一样
  • InnoDB:建议使用varchar类型,因为InnoDB内部行存储的格式并没有区分固定长度和可变长度(所有数据行都是用指向数据列值得头指针),而且主要影响性能因素是数据行使用的存储总量,所以一般情况除了简短并且固定长度的使用char,其他都使用varchar。

二级制字符串

类型特点值的长度占用空间
BINARY(M)固定长度M (0 <= M <= 255)M个字节
VARBINARY(M)可变长度M (0 <= M <= 65535)M+1个字节

和char、varchar很像

二进制大对象

类型长度长度范围占用空间
TINYBLOBL0 <= L <= 255L + 1 个字节
BLOBL0 <= L <= 65535(相当于64KB)L + 2 个字节
MEDIUMBLOBL0 <= L <= 16777215 (相当于16MB)L + 3 个字节
LONGBLOBL0 <= L <= 4294967295(相当于4GB)L + 4 个字节

TEXT和BLOB的使用注意事项

  • BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的" 空洞 ",以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理

  • 把BLOB或TEXT列 分离到单独的表 中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的碎片 ,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过网络传输大量的BLOB或TEXT值。

JSON类型

MYSQL5.7已经支持,MYSQL8.0加了自动验证的json文档和优化的存储结构。

空间类型

MySQL 空间类型扩展支持地理特征的生成、存储和分析。这里的地理特征表示世界上具有位置的任何东西,可以是一个实体,例如一座山;可以是空间,例如一座办公楼;也可以是一个可定义的位置,例如一个十字路口等等。MySQL中使用 Geometry(几何) 来表示所有地理特征。Geometry指一个点或点的集合,代表世界上任何具有位置的事物。

MySQL的空间数据类型(Spatial Data Type)对应于OpenGIS类,包括单值类型:GEOMETRY、POINT、LINESTRING、POLYGON以及集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值