当前位置: 首页 > java >正文

【MySQL】数据类型

🏠个人主页:Yui_
🍑操作环境:Centos7
🚀所属专栏:MySQL

image.png

文章目录

  • 前言
  • 1. bit类型
  • 2.tinyint类型
  • 3. float类型
  • 4. decimal
  • 5. char类型
  • 6. varchar
  • 5&6 char和varchar的比较
  • 7.日期和时间类型
  • 8.enum和set
  • 总结

前言

数据库也是有数据类型的,各个类型也有不同的数据范围。在前面的文章中我们只使用到了varchar这个类型,其实MySQL中还是有许多的其他类型:
image.png
上表只是对数据类型的简单介绍,下面就开始详细的讲解MySQL中的数据类型~

1. bit类型

语法:

bit [(num)]

位字段类型,num表示每个值的位数,范围从1到64,如果M被忽略,默认为1.
image.png
创建一个占3比特的a属性,也就表达了它的数据范围为0~7(000~111)b
下面就来验证是否如此:
image.png
可以看到的是,7和0都插入成功了,但是8就失败了。和预期结果相同。
但是,在查看表内容的时候就很奇怪,内容呢?
看上去好像有内容,但是我们看不见,这就和bit的显示方式有关了,bit的显示方式是按照ASCII码表显示的。就像a的ASCII码为97.
为了验证是不是,我修改下属性类型。
image.png
事实证明确实如此~
恭喜你掌握一个数据类型了,继续看下去吧。

2.tinyint类型

根据上面表中的数据范围,tinyint的数据访问为-128~127,这个范围就是一个字节(8比特位)可以表示的范围。
image.png
此时并没有指定无符号的tinyint,所以范围为-128~127
image.png
符合要求,下面开始添加一个属性,数据类型为无符号的tinyint,再测试一次。
image.png

了解完tinyint那么smallint mediumint int bitint都是如此,只是数据范围不同而且,读者可以自行测试。

3. float类型

光有整型肯定是满足不了真实的使用情况的,float就是MySQL中表示小数(浮点数)的类型。
语法:

float [(m,d)] [unsigned]
  • m:指定显示长度。
  • d:指定小数位数。
    比如(4,2)的正确小数表达有12.21。可以表达的范围为-99.99~99.99
    注意:MySQL在保存值的时候会四舍五入。
    image.png
    创建一个数据类型为float(4,2)的属性。
    先来验证四舍五入吧
    image.png
    好像有点问题,12.996确实四舍五入了,但是12.995并没有。这是一个很奇特的现象。
    后续我还测试了90.995,这个就可以四舍五入为91.00
    这种不一致可能是由于浮点数在计算机中的表示方式导致的。计算机在处理十进制小数时,可能会出现微小的误差,导致四舍五入的结果不一致。
    例如,10.995 在内部可能被表示为略小于 10.995,如 10.994999...,因此在四舍五入时被截断为 10.99。而 90.995 可能被表示为略大于 90.995,如 90.995000...,因此在四舍五入时被提升为 91.00
    所以如果我们确定了表示范围,最好不要插入超过范围的值,结果可以会和你想的不同。
    无符号的float我就不验证了,读者可以自行验证。

4. decimal

可以理解为精度更高的float,类似于C++中的double。
语法和float完全相同。

decimal [(m,d)] [unsigned]

如果你希望获得更高的精度,推荐使用decimal
image.png

5. char类型

语法:

char (L)

固定长度字符串,L是可以存储的长度,单位为字符,最大长度可以为255.
注意:这里的单位为字符不是字节,且再MySQL中不论是字母还是汉字都一个字符。
image.png
还是先创建一个表来演示。
image.png

6. varchar

语法:

varchar(L)

可变长度的字符串,L表示字符长度,最大长度65535字节。
注意:长度同样是字符,但是最大长度是字节。
根据最大长度,我们可以推测出最多能存储多少个汉字,一个汉字占3个字节(utf8).
65,535/3=21,845
吗?
其实,在varchar还有1~3个字节专门用来记录数据长度,这样实际可以使用的字节就少了。
(65535-3)/3 = 21844.
下面来验证是不是这样。
image.png
事实确实人如此,不过要记住,这是utf8的时候,其他字符集要另算给。

5&6 char和varchar的比较

以下总结来自CPT:

特性CHAR(n)VARCHAR(n)
含义固定长度字符串,长度固定为 n 字符可变长度字符串,最多 n 个字符
空间分配不足部分会用空格填充(补全到 n 个字符)精确保存实际内容长度 + 1 或 2 字节长度信息
性能更快(特别是定长数据)稍慢,因需额外处理长度信息和变长对齐
存储空间更大(总是占用 n 字符空间)更节省(只占用实际数据长度)
应用场景内容长度固定,例如身份证号、状态码内容长度不定,例如文章标题、地址等
  • CHAR 更适合频繁修改、搜索的定长字段
    • 如:国家代码、电话区号、性别等
    • 因为定长数据对齐快、比较快
  • VARCHAR 更适合存储变化较大或较长的数据
    • 如:地址、简介、备注等
    • 节省存储空间,避免空格填充浪费

7.日期和时间类型

MySQL中的时间类型有这3个:date、datetimetimestamp`

  • date:日期yyyy-mm-dd占用3字节。
  • datetime:时间日期格式yyyy-mm-dd HH:ii:ss,表示范围从1000到9999占用八字节。
  • timestamp:时间戳,从1970年开始,格式同datetime 占用4个字节。
    image.png
    注意:添加时间时,时间戳会自动补全当前时间。
    image.png
    更新数据时,时间也会更新。

8.enum和set

语法:

  • enum:枚举,’单选‘类型。
enum('选项1','选项2'...)

该设定只是提供了若干个选项的值,最终一个单元中实际只存储一个值;而且出于效率的考虑,这些值实际存储的是数字,可以把数字看作为下标,选项最多为65535个,当我们添加枚举值时,也可以添加对应数字的数字编号。

  • set:集合,多选类型。
set('选项1','选项2'...)

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个
为了演示,创建一个调查表,记录姓名,性别,爱好。
image.png

根据上面的介绍,性别肯定只能选一个,但是爱好可以多选。
现在开始插入数据:
image.png

总结

本位介绍了MySQL中的数据类型,也了解的各个数据类型的具体用法,数据范围。希望大家在后续的创建表的过程中,可以合理使用这些数据类型。


往期文章:
【MySQL】数据库基础-CSDN博客.
【MySQL】库的操作-CSDN博客
【MySQL】表的操作-CSDN博客

http://www.xdnf.cn/news/661.html

相关文章:

  • 【OSG学习笔记】Day 4: 相机与视口——控制观察视角
  • 【C++】深入浅出之多态
  • Arduino示例代码讲解:Project 07 - Keyboard 键盘
  • 【AI+HR实战应用】用DeepSeek提升HR工作效能
  • LeetCode[225]用队列实现栈
  • 基于 Spring Boot 瑞吉外卖系统开发(五)
  • thymeleaf模板引擎
  • 【AI训练环境搭建】在Windows11上搭建WSL2+Ubuntu22.04+Tensorflow+GPU机器学习训练环境
  • 996引擎-拓展变量:物品变量
  • 【技术派后端篇】Redis实现统计计数
  • 全同态加密医疗数据分析集python实现
  • 深入探索 Unix 与 Linux:历史、内核及发行版
  • QML 样式库
  • OpenCV基础01-图像文件的读取与保存
  • 【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题
  • Qt基础005(文件操作后续)
  • 中间件--ClickHouse-14--案例-3-其他案例思路概述
  • 爆肝整理!Stable Diffusion的完全使用手册(二)
  • trivy开源安全漏洞扫描器——筑梦之路
  • 【21天学习打卡挑战赛】如何学习WEB安全:逼自己在短时间掌握WEB安全核心内容
  • 深入理解 CICD 与 Jenkins 流水线:从原理到实践
  • Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)
  • 机器学习中的“三态模型“:过拟合、欠拟合和刚刚好
  • WordPress按分类ID调用该分类的内容数量
  • 【网络】数据链路层知识梳理
  • Vue3项目自定义全局防抖节流
  • Linux命令-Shell编程
  • 星拍相机APP:时尚与科技的完美融合,打造你的专属美
  • 【Docker项目实战】使用Docker部署Jupyter Notebook服务
  • go语言对http协议的支持