数据库---Day3 数据类型

本系列可作为数据库学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。

点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励! 

系列文章目录

JAVA初阶---------已更完

JAVA数据结构---------已更完

数据库---Day 1 数据库基础

数据库---Day2 数据库操作

数据库---Day3 数据类型

数据库---Day4 数据表的操作

数据库---Day5 数据表的增删改查

数据库---Day6 数据库约束

数据库---Day7 数据表设计

数据库---Day8 多表联合查询

数据库---Day9 视图

数据库---Day10 索引

数据库---Day11 事务

数据库---Day12 JDBC


目录

目录

系列文章目录

目录

前言

一、为什么必须学数据类型

二、数值类型(最常用、最容易溢出)

2.1 整数类型完整列表(含大小、范围、用途)

特别说明

2.2 小数类型(浮点 vs 定点)

2.2.1 FLOAT(单精度)

2.2.2 DOUBLE(双精度)

2.2.3 DECIMAL (M,D)(高精度定点数)

开发铁律(必背)

三、字符串类型(最复杂、面试最多)

3.1 字符串类型完整清单

3.2 CHAR 与 VARCHAR 深度对比(面试高频)

3.2.1 CHAR (M) 固定长度

3.2.2 VARCHAR (M) 可变长度

3.2.3 经典示例(文档原版)

3.3 VARCHAR 与 TEXT 深度区别(开发必懂)

3.4 ENUM 与 SET(极高效、极省空间)

3.4.1 ENUM 枚举(单选)

3.4.2 SET 集合(多选)

四、二进制类型(存文件、字节流)

五、日期与时间类型(自动维护、时区、自动更新)

5.1 日期类型完整清单

关键参数:fsp 小数秒精度

常用系统时间函数

5.2 DATETIME 与 TIMESTAMP 核心区别

DATETIME

TIMESTAMP

开发最佳实践

六、字符串排序规则与字符集(文档重点)

七、最全开发选型指南(直接照着用)

7.1 数值类型怎么选

7.2 字符串怎么选

7.3 日期怎么选

八、全文总结(极简版)


前言

小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!

在 MySQL 建表时,字段数据类型是决定表性能、存储空间、数据准确性与后期扩展性的核心。选得不对,轻则数据溢出、精度丢失,重则索引失效、查询缓慢、重构困难。

一、为什么必须学数据类型

在面向对象开发里:

  • 类 → 数据库表
  • 类属性 → 表字段
  • 对象实例 → 表行数据

要给字段存值,就必须先规定它能存什么、占多大空间、怎么存储。这就是数据类型

MySQL 常用数据类型分为四大类:

  1. 数值类型
  2. 字符串类型
  3. 二进制类型
  4. 日期与时间类型

二、数值类型(最常用、最容易溢出)

数值类型分为:整数、浮点数、定点数、位类型、布尔型

2.1 整数类型完整列表(含大小、范围、用途)

类型占用字节有符号范围无符号(UNSIGNED)范围典型业务场景
BIT(M)1~64 位位存储、开关
TINYINT1-128 ~ 1270 ~ 255状态、性别、是否删除
SMALLINT2-32768 ~ 327670 ~ 65535类型、小枚举
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215较大计数
INT / INTEGER4-2147483648 ~ 21474836470 ~ 4294967295用户 ID、订单 ID、通用数字
BIGINT8-2⁶³ ~ 2⁶³-10 ~ 2⁶⁴-1分布式 ID、超大金额、日志 ID

特别说明

  • BOOL / BOOLEAN本质就是 TINYINT(1)

    • 0 → false
    • 非 0 → true
  • BIT(M)M 表示位数,1~64,省略 M 则默认 1 位。适合存极省空间的布尔位。

2.2 小数类型(浮点 vs 定点)

2.2.1 FLOAT(单精度)

  • 占用:4 字节
  • 精度:约 7 位有效数字
  • 语法:FLOAT(M,D)M = 总位数,D = 小数位数

2.2.2 DOUBLE(双精度)

  • 占用:8 字节
  • 精度:约 15 位有效数字
  • 语法:DOUBLE(M,D)

2.2.3 DECIMAL (M,D)(高精度定点数)

  • 占用:动态字节
  • 无精度丢失(最关键)
  • M 最大:65
  • D 最大:30
  • 默认:DECIMAL (10,0)

M中不计算小数喊口号和负数的,如果D为0,则具体的值不保存小数点和小数部分(也就是说保存的是一个整数)

开发铁律(必背)

  • 金额、价格、财务、交易 → 必须用 DECIMAL
  • 禁止用 FLOAT/DOUBLE 存钱,会出现精度丢失!

在有些系统中表示金额,一般把元为单位换成分,然后用int类型表示金额。

三、字符串类型(最复杂、面试最多)

字符串分为:

  • 定长字符串:CHAR
  • 变长字符串:VARCHAR
  • 文本类型:TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT
  • 二进制字符串:BINARY / VARBINARY / BLOB 系列
  • 枚举:ENUM
  • 集合:SET

3.1 字符串类型完整清单

类型说明最大长度
CHAR(M)固定长度字符255 字符
VARCHAR(M)可变长度字符65535 字节
TINYTEXT极小文本255 字节
TEXT普通文本65535 字节(64KB)
MEDIUMTEXT中文本16MB
LONGTEXT大文本4GB
BINARY(M)固定长度二进制255 字节
VARBINARY(M)可变长度二进制65535 字节
TINYBLOB小二进制255 字节
BLOB二进制64KB
MEDIUMBLOB中二进制16MB
LONGBLOB大二进制4GB
ENUM单选枚举65535 个值
SET多选集合64 个值

3.2 CHAR 与 VARCHAR 深度对比(面试高频)

3.2.1 CHAR (M) 固定长度

  • M:字符数,0~255
  • 不足长度用空格填充
  • 查询时自动删除尾部空格
  • 速度快、浪费空间
  • 适合:长度固定的数据例:身份证、手机号、学号、邮编、MD5、UUID

3.2.2 VARCHAR (M) 可变长度

  • M:最大字符数
  • 实际用多少存多少
  • 1~2 字节 记录真实长度
    • ≤255 字节:1 字节
    • 255 字节:2 字节

  • 查询时保留尾部空格
  • 节省空间、速度略低
  • 适合:长度不固定的数据例:姓名、标题、地址、备注

3.2.3 经典示例(文档原版)

CREATE TABLE vc (
  v VARCHAR(4),
  c CHAR(4)
);

INSERT INTO vc VALUES ('ab ', 'ab ');

查询:

SELECT CONCAT('(',v,')'), CONCAT('(',c,')') FROM vc;

结果:

(ab)      (ab)

原因:

  • CHAR 会删掉末尾空格
  • VARCHAR 会截断超长空格并报警告

3.3 VARCHAR 与 TEXT 深度区别(开发必懂)

对比项VARCHARTEXT
最大长度65535 字节65535 字节,超了自动升级
存储方式<768 字节存行内,否则溢出全部存在溢出页
索引可以建普通索引不能直接建普通索引,只能全文索引
查询性能
适用场景需要检索、短内容大内容、不常检索

开发原则:能 VARCHAR 绝对不用 TEXT!

3.4 ENUM 与 SET(极高效、极省空间)

3.4.1 ENUM 枚举(单选)

  • 从列表中只能选一个
  • 内部以整数存储
  • 最多 65535 个选项

示例:

gender ENUM('男','女','未知')

3.4.2 SET 集合(多选)

  • 从列表中可选多个
  • 内部以整数存储
  • 最多 64 个选项

示例:

hobby SET('游泳','跑步','游戏','读书')

四、二进制类型(存文件、字节流)

二进制类型和字符串对应,但存的是字节,不是字符

  • BINARY → 对应 CHAR
  • VARBINARY → 对应 VARCHAR
  • BLOB 系列 → 对应 TEXT 系列

用途:

  • 图片字节
  • 文件流
  • 加密字节
  • 不适合直接阅读的二进制数据

现代开发一般不把文件存在数据库,而是存文件路径,二进制类型用得越来越少。

五、日期与时间类型(自动维护、时区、自动更新)

MySQL 提供 5 种日期时间类型,比用字符串存时间更省空间、更容易排序、更安全。

5.1 日期类型完整清单

类型字节范围格式用途
DATE31000-01-01 ~ 9999-12-31YYYY-MM-DD只存日期
TIME3-838:59:59 ~ 838:59:59hh:mm:ss只存时间
YEAR11901 ~ 2155YYYY只存年份
DATETIME81000~9999YYYY-MM-DD hh:mm:ss业务时间
TIMESTAMP41970-2038时间戳更新时间、自动维护

关键参数:fsp 小数秒精度

  • 0~6 位,默认 0
  • 示例:DATETIME(3) 精确到毫秒
  • 示例:TIMESTAMP(6) 精确到微秒

常用系统时间函数

  • NOW() / CURRENT_TIMESTAMP → 当前日期时间
  • CURDATE() → 当前日期
  • CURTIME() → 当前时间

5.2 DATETIME 与 TIMESTAMP 核心区别

DATETIME

  • 范围大:1000–9999
  • 不受时区影响
  • 手动赋值
  • 占用 8 字节

TIMESTAMP

  • 范围小:1970–2038
  • 受时区影响
  • 可设置 ON UPDATE CURRENT_TIMESTAMP
  • 占用 4 字节

开发最佳实践

  • 业务时间(创建时间、生日、下单时间)→ DATETIME
  • 更新时间(自动刷新)→ TIMESTAMP

六、字符串排序规则与字符集(文档重点)

  • 字符串以字符为单位,可单独指定字符集与排序规则例:utf8mb4 + utf8mb4_0900_ai_ci

  • 二进制以字节为单位,排序按数字编码例:utf8mb4_bin

  • _ci:大小写不敏感

  • _cs:大小写敏感

  • _bin:二进制比较

七、最全开发选型指南(直接照着用)

7.1 数值类型怎么选

  • 状态 / 是否删除 / 性别 → TINYINT
  • 普通 ID / 计数 → INT
  • 超大 ID / 分布式 ID → BIGINT
  • 金额 / 价格 / 财务 → DECIMAL
  • 经纬度 / 科学计算 → DOUBLE

7.2 字符串怎么选

  • 长度固定 → CHAR
  • 长度不固定、需索引 → VARCHAR
  • 文章 / 详情 / 不检索 → TEXT
  • 单选状态 → ENUM
  • 多选标签 → SET

7.3 日期怎么选

  • 只存日期 → DATE
  • 完整业务时间 → DATETIME
  • 自动更新时间 → TIMESTAMP
  • 只存年份 → YEAR

八、全文总结(极简版)

  1. 建表先定类型,类型决定性能、空间、安全
  2. 整数选合适大小,不要一律 INT
  3. 钱必须用 DECIMAL
  4. 固定长度用 CHAR,变长用 VARCHAR
  5. 能 VARCHAR 不用 TEXT
  6. 日期不要用字符串,用 MySQL 原生日期类型
  7. ENUM/SET 极快极省空间,适合固定选项

这一篇就是 MySQL 数据类型最全、最细、最贴近教材、最适合实战的完整版手册,不管是学习、面试、建表都够用。


总结

以上就是今天要讲的内容,本文简单记录了数据结构学习内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yvonne爱编码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值