MySQL:表中的数据类型

news2024/9/29 9:35:07

数值类型

int类型

int类型包含以下五种:

类型大小
tinyint1 byte
smallint2 byte
mediumint3 byte
int4 byte
bigint8 byte

t1num列的类型就是tinyint,我们尝试对其插入数据,来测试其范围。tinynt1 byte,那么就可以表示256个数字。 

成功插入了-1,说明tinyint默认是有符号的。其实整个int家族,默认都是带符号的

如果想要不带符号,建表时在类型的末尾后紧跟unsigned

tinyint有符号时,存储范围是[-128, 127];无符号时,范围是[0, 255]。其它int家族的成员同理。


bit类型

顾名思义,bit类型就是自己指定比特位的数目。

语法:

bit(M)

其中M表示比特位的数目,如果省略(M)则默认表示一个比特位,M的取值范围是[1, 64]。 

t3表有两列,分别是idonlineonline的类型是bit(1)(也可省略为bit),即只占用一个比特位。

分别对online插入0, 1, 2,发现01可以正常插入,但是2不行,因为一个比特只能表示01bit类型在输出时,默认以ASCII码的形式展示,而01ASCII码中是控制字符,不可输出,所以我们看不到。

我现在将bit(1)改为bit(10),然后插入数字97

可以看到,最后数字97输出时,输出的是97对应的字符'a'


浮点类型
float / double

floatdouble用于存储浮点型,也就是小数,占用内存如下:

类型大小
float4 byte
double8 byte

语法:

float(m, d) [unsigned]

其中m指定浮点数的总长度,d指定小数位数。 

float(4, 2),表示整个浮点数占4位数字,小数点后占2位,也说明了小数点前的数字位数是4 - 2 = 2位,存储范围是[-99.99, 99.99]

如果希望存储无符号的数字,那么就是float(4, 2) unsigned,但是与整数不同,unsigned对浮点数只影响最小值为0,最大值不变,此时存储范围变成[0, 99.99].

首先创建一张表,其中第二列num的类型是float(4,2)

 99.99正常插入了,但是100超出范围了,可见99.99是边界值。

可知:当小数点后位数不足时,自动补0到精度。 

可知:当小数点后超出精度,此时发生四舍五入。 

float可以不指定(m, d),此时直接使用 float 不会强制保留固定数量的小数位,而是更具输入的数字实时调整。

  1. 直接使用float,数字的位数可以根据插入的值自由调整
  2. 对于精度较高的数字,无法很好的保存,会四舍五入

一般来说,float的精度是7位十进制数字,包括小数点前后。而456.789108位数字,所以发生了精度损失。

在插入较大的整数时,整数也会有损失,比如插入123456789


decimal

从刚刚的float讲解可以看出:floatdouble会有精度损失,不适合存储对精度要求高的小数,因此MySQL推出了decimal类型,专门用于存储高精度要求的浮点数

语法:

decimal(m,d) [unsigned]

decimal最大的m65,最大的d30。如果省略m,则默认m=0,如果省略d,则默认d=10

在使用上,decimalfloat / double没有任何区别。


字符串类型

MySQL中,字符串使用了charvarchar来存储,与大部分编程语言不同,编程语言中char往往只存储一个字符。

char

char用于存储固定长度的字符串。

语法:

char(L)

L用于指定字符串的最大长度L的最大值为255。 

 字符串'a''ab''abc'都插入成功了,而'abcd'超出了长度,插入失败。

 字符串'中国人'插入成功了,根据utf8编码规则,普通字母占1 byte,而汉字占3 byte。在部分编程语言中,例如C/C++,汉字算作三个字符,但是MySQL中认为一个汉字也是一个字符


varchar

语法:

varchar(L)

L用于指定字符串的最大长度,L的最大值为不确定,但是最大字节数为65535

对于char来说,如果指定了字符串的长度,那么存入的所有字符串都是这个长度所占字节的大小。对于varchar来说,只要存入的字符串没有超过指定长度,那么该字符串占用多少内存,就实际开辟多少内存

经过计算,若以utf8编码,varchar最大能存储65535 / 3 = 21845个字符。

BUT,因为varchar类型每个字符串占用的字节数不确定,所以读取内存时,不知道这个字符串读取到啥时候结束,所以在整个字符串的首部,需要开辟1 - 3 byte,来存储这个字符串的长度。总共有65535 byte,减去首部占用的3 byte,最后能用的只有(65535 - 3) / 3 = 21844个字符.


日期时间类型

MySQL中,日期与时间也有专门的类型来存储,包以下三种:

类型含义格式大小
data日期yyyy-mm-dd4 byte
datetime日期 + 时间yyyy-mm-dd HH:ii:ss8 byte
timestamp时间戳yyyy-mm-dd HH:ii:ss4 byte

通过desc可以看到,timestamp的默认值DefaultCURRENT_TIMESTAMP,也就是当前的时间

time1time2都按照正常格式插入了,与之同时time3自动更新为了当前时间。一般来说timestampdatetime没有格式上的区别,但是由于timestamp会自动更新,所以一般用于保存最后一次的修改时间.


enum & set

enum为枚举类型,用于进行单选。

语法:

enum('选项1', '选项2', '选项3', ...)

set为集合类型,用于进行多选。

语法:

set('选项1', '选项2', '选项3', ...)

现在创建了表t10,其第二列gender为枚举enum,第三列hobby为集合set。通过desc可知,enumset都允许为NULL

张三有多个爱好,此时多个选项用逗号隔开:'篮球,羽毛球'

那么对于enumset来说,它们底层都使用数字来存储。

  • enum中,选项从前往后分别用数字1,2,3,4,5...表示,最大值为65535
  • set中,选项通过位图存储,第一个选项为二进制1,第二个选项为二进制10,第三个选项为二进制100,以此类推,最多64个选项

比如enum('男','女','保密')中,'男' = 1,'女' = 2,'保密' = 3;set('羽毛球','乒乓球','篮球','足球') 中,'羽毛球' = 1,'乒乓球' = 2,'篮球' = 4,'足球' = 8。

在插入时,如果想选中'羽毛球,足球',就可以插入8+1=9.

对于set,多选包括不选,插入空字符串'',或者数字0都可: 此处要注意,空串表示啥也不选,此处表示这个人没有任何爱好。而NULL表示缺少这个值,此处表示这个人的爱好不确定

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opengl学习6

理解glVertexAttribPointer()函数 OpenGL glVertexAttribPointer()函数解析-CSDN博客 难理解的是最后一个参数。 这个参数指明了,顶点属性的数据从哪里获取。 # 如果是(void*) 0,则表示数据从已绑定的VBO中获取,从…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

《 C++ 修炼全景指南:六 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…

【成品论文】2024年华为杯研赛D题成品论文获取入口

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击文末的卡片&#xff0c;那是获取资料的入口! 现分享2023年华为杯研赛D题成品论文&#xff08;部分&#xff09;&#xff0c;供大家学习&#xff1a; 题 目&#xff1a; ____区域双碳目标与路径规划研究 …

MySQL之安装与基础知识

目录 一&#xff1a;在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二&#xff1a;MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器&#xff0c;数据库&#xff0c;表关系及使用案例 4…

function uuid_generate_v4()不存在

说明&#xff1a;记录一次使用postgresql函数错误&#xff0c;如下&#xff1a; 项目中的一个SQL用到了uuid_generate_v4()函数生成uuid作为记录的主键&#xff0c;结果报上面这个错误&#xff1b; 分析&排查 首先&#xff0c;我连接上了数据库&#xff0c;在数据库里敲下…

《论网络安全体系设计》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化的普及&#xff0c;计算机网络已经在各行各业得到了广泛的应用。目前&#xff0c;绝大多数业务处理几乎完全依赖计算机和网络执行&#xff0c;各种重要数据如政府文件、工资档案、财务账目和人事档案等均依赖计算机和网络进行存储与传输。另一方面&…

ThreeJs创建圆环

ThreeJs除了创建基本的长方体&#xff0c;球形&#xff0c;圆柱等几何体&#xff0c;也可以创建一些特殊的几何体&#xff0c;比如圆环&#xff0c;多边体&#xff0c;这节就来讲怎么用Threejs绘制出圆环。首先依然是要创建出基础的组件&#xff0c;包括场景&#xff0c;相机&a…

如何理解Configurational entropy

Configurational entropy 是热力学和统计力学中的一个重要概念&#xff0c;它描述的是系统中由于其微观状态排列&#xff08;即配置&#xff09;导致的不确定性或混乱程度。不同于热力学中的热熵&#xff08;thermal entropy&#xff09;&#xff0c;它特指那些与系统中的粒子、…

8.6小波变换(Wavelet Transform)边缘检测

实验原理 由于OpenCV本身并不直接支持小波变换&#xff08;Wavelet Transform&#xff09;&#xff0c;我们需要借助一些技巧来实现它。一种常见的方法是利用离散余弦变换&#xff08;DCT&#xff09;或离散傅立叶变换&#xff08;DFT&#xff09;来近似实现小波变换的功能。但…

Spring的核心思想

目录 一、Spring要解决的问题 二、Spring的核心结构 三、核心思想 3.1.1 什么是IOC 3.1.2 IOC解决的问题&#xff1a;耦合 3.1.3 IOC和DI的区别 3.2.1 什么是AOP 3.2.2 AOP解决的问题&#xff1a;耦合 3.2.3 为什么叫做面向切面编程 一、Spring要解决的问题 问题1&am…

道路检测-目标检测数据集(包括VOC格式、YOLO格式)

道路检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1nDwTmZxH_BQrVTj9MzUgDg?pwd3zh7 提取码&#xff1a;3zh7 数据集信息介绍&#xff1a; 共有 3321张图像和一一对应的标注文件 标注文…

Excel 国产化替换新方案

前言 在当前数字化转型和信创&#xff08;信息技术应用创新&#xff09;战略背景下&#xff0c;企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件&#xff0c;SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…

衡石分析平台使用手册-通用配置文档

配置文件​ 配置文件中存放 HENGSHI SENSE 的配置参数&#xff0c;可以通过修改配置文件来改变 HENGSHI SENSE 的服务方式。 配置文件说明​ 配置文件存放在 conf 路径下&#xff0c;包含 hengshi-sense-env.sh 和 engine-segment-hosts 两个文件。其中 engine-segment-host…

Qt与VS打包命令

一 QT 将程序编译生成的可执行文件&#xff08;.exe&#xff09;放到一个干净的文件夹。找到QT安装目录&#xff0c;进入编译版本的bin目录&#xff0c;找到windeployqt.exe&#xff0c;在文件访问路径栏的最前边&#xff0c;添加“cmd ”进入控制台。控制台命令&#xff1a; …

K8s 简介以及详细部署步骤

Kubernetes 简介 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 1、传统部署 互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源…

【Java面试】第七天

&#x1f31f;个人主页&#xff1a;时间会证明一切. 目录 有三个线程T1,T2,T3如何保证顺序执行&#xff1f;依次执行start方法使用join使用CountDownLatch使用线程池使用CompletableFuture Spring Bean的生命周期是怎么样的&#xff1f;Autowired和Resource的关系&#xff1f;相…

使用Python生成多种不同类型的Excel图表

目录 一、使用工具 二、生成Excel图表的基本步骤 三、使用Python创建Excel图表 柱形图饼图折线图条形图散点图面积图组合图瀑布图树形图箱线图旭日图漏斗图直方图不使用工作表数据生成图表 四、总结 Excel图表是数据可视化的重要工具&#xff0c;它通过直观的方式将数字信…

Linux环境

Linux环境 导语程序参数getoptgetopt_long 环境变量getenv/putenvenviron 时间和日期timedifftime和gmtimectime&asctimestrftime/strptime 临时文件tmpnamtmpfile 获取信息用户主机日志 资源和限制总结参考文献 导语 任何程序都是在一定的环境下运行的&#xff0c;通常这…