MySQL中的数据类型

本文详细介绍了MySQL中的数据类型,包括整数型如TINYINT、INT、BIGINT,位类型BIT,小数点类型的浮点数和定点数,时间类型如DATE、DATETIME,以及文本和二进制类型如CHAR、VARCHAR、BLOB。同时提到了阿里巴巴的数据库规范,强调了非负数应使用UNSIGNED,避免使用FLOAT和DOUBLE进行精度要求高的计算。
摘要由CSDN通过智能技术生成

Java知识点总结:想看的可以从这里进入

3、MySQL的基本语法


3.1、数据类型

3.1.1、数值类型
1、整数型
类型字节长度范围(有符号)范围(无符号)用途
TINYINT(一般用于枚举数据,取值范围很小且固定的场景)1(-128,127)(0,255)小整数值
SMALLINT(用于较小范围的统计数据)2(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT(用于较大整数的计算)3(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER(取值范围足够大,一般情况下不用考虑超限问题,用得最多。)4(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT(处理特别巨大的整数时才会用到。)8(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值

整数类型在定义时,可用的参数有三个:

  1. M : 表示显示宽度,M的取值范围是(0, 255)。该项功能需要配合“ ZEROFILL填零 ”使用,用“0”填满宽度。

  2. UNSIGNED:无符号类型(非负),最小取值为0。

    int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)。

  3. ZEROFILL:填零,用0填充

2、位类型

BIT类型,BIT类型中存储的是二进制值,如果没有指定(M),默认是1位,只有0和1。(M)是表示二进制的位数,位数最小值为1,最大值为64。

类型字节长度范围(有符号)范围(无符号)用途
BIT10或1类似布尔值
3、小数点型

浮点数和定点数类型的特点是可以处理小数,

  1. 浮点型:不精准,要避免使用“=”来判断两个数是否相等。

    类型字节长度范围(有符号)范围(无符号)用途
    FLOAT4(-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(-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)双精度浮点数值
  2. 定点数:精准,没有误差,适合于对精度要求极高的场景

    类型字节长度范围(有符号)范围(无符号)用途
    DECIMAL(M,D)依赖于M和D的值定点数,取值精确准,没有误差,适合于对精度要求极高的场景
3.1.2、时间类型

使用较多,在创建数据库时必要添加的字段就是主键ID、数据的创建时间和数据的修改时间,所以每条数据都需要用到时间相关的信息。

类型大小 ( bytes)格式
DATE(年、月、日)3YYYY-MM-DD使用 CURRENT_DATE() 或者 NOW() 函数,会插入当前系统的日期。
TIME(时、分、秒)3HH:MM:SS使用 CURRENT_TIME() 或者 NOW() ,会插入当前系统的时间。
YEAR(年)1YYYY
DATETIME(年、月、日、时、分、秒)8YYYY-MM-DD HH:mm:ss使用函数 CURRENT_TIMESTAMP() 和 NOW() ,可以向DATETIME类型的字段插入系统的当前日期和时间。
TIMESTAMP(时间戳) 1970.1.1 到现在的毫秒数,便于计算4YYYYMMDD HHMMSS
3.1.3、文本类型
1、Text类型
类型大小M用途
CHAR0- M- 255,占用M和字节定长字符串,需要指定长度,默认为1,如果数据小于指定长度,会用空格填充(在检索时会自动去除空格)
VARCHAR0-M-65535,占用M+1个字节变长字符串,须指定 长度M,VARCHAR(20),表示可以保存20个字符,比CHAR节省空间,但是效率要低于CHAR
TINYTEXT0 - M -255 ,占用M+ 2 个字节微型文本,可变长度
TEXT0 - M- 65535,占用M+ 2 个字节文本、可变长度
MEDIUMTEXT0- M- 6 777 215,占用M+ 3 个字节中等长度文本数据、可变长度
LONGTEXT0- M- 4 294 967 295,占用M+ 4个字节极大文本数据、可变长度
JSON轻量级的 数据交换格式,保存JSON对象,JSON数组
UUID
2、二进制文件

二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据.

类型大小用途
BINARY0 -M - 255,M个字节存储的是二进制字符串,和CHAR类似
VARBINARY0 -M- 65535,M+1个字节存储的是二进制字符串,和VARCHAR类似
TINYBLOB0-M -255,M+1个字节不超过 255 个字符的二进制字符串
BLOB0-M -65 535,M+2个字节二进制形式的长文本数据,可以容纳可变数量的数据。
MEDIUMBLOB0-M -16 777 215,M+3个字节二进制形式的中等长度文本数据
LONGBLOB0-M -4 294 967 295,M+4个字节二进制形式的极大文本数据
3.1.4、其他
类型长度M用途
ENUM1 - M - 65535 ,占用1或2个字节
含1~255个成员时,需要1个字节的存储空间;
含256~65535个成员时,需要2个字节的存储空间
枚举类型,只允许从成员中选取单个值,不能一次选取多个值
SET1 - M - 8 1个字节
9 - M - 16 2个字节
17 - M - 24 3个字节
25 - M - 32 4个字节
33 - M - 64 8个字节
SET类型在选取成员时,可以一次选择多个成员
3.1.5、阿里的规范
  1. 任何字段如果为非负数,必须是 UNSIGNED

  2. 【 强制 】小数类型为 DECIMAL,禁止使用 FLOAT 和 DOUBLE。

    (在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。如果存储的数据范围超过 DECIMAL 的范围,建议将数据拆成整数和小数并分开存储。)

  3. 【 强制 】如果存储的字符串长度几乎相等,就使用 CHAR 定长字符串类型。

  4. 【 强制 】VARCHAR 是可变长字符串,不预先分配存储空间,长度不要超过 5000。如果存储长度大于此值,定义字段类型为 TEXT,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辰 羽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值