MySQL——数据类型(一)

目录

一、前言

二、数值类型

2.1 tinyint [unsigned]

2.1.1 插入合法数据

2.1.2 插入边界数据

2.1.3 插入不合法数据

2.1.4 结论

2.2 bit [n]

2.3 float [(m, d)] [unsigned] 

2.3.1 float 特性

2.3.2 插入整数部分大于 m-d 的数字

2.3.3 插入小数部分大于 d 的数字 

2.3.4 插入一个五入后整数部分会多余 m-d 的数字

2.3.5 float 范围总结

2.4 decimal [(m, d)] [unsigned]

三、字符串类型

3.1 char(L)

3.2 varchar(L)

3.3 char 与 varchar


思维导体可参考链接:

数据类型.xmind · 夜夜亮晶晶/MySQL - Gitee.comicon-default.png?t=O83Ahttps://gitee.com/bright-and-sparkling-at-night/mysql/blob/1c557ac01b63e74f67821505e30c6a8e5b5cf095/2024-9/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.xmind

一、前言

数据类型分类:

在上表中,标红的是接下来会讲到的知识, 使用[ ]的是可选项,使用( )的是必选项。

二、数值类型

2.1 tinyint [unsigned]

tinyint 是占用空间比较小的数值类型,用来存储范围内的整型,
取值范围:有符号:[-128, 127] 无符号:[0, 255]
从它的存储范围不难看出, tinyint 在内部占用的是 8bit 也就是 1Byte ,
下面来看以下当输入合法和不合法时, MySQL 会做出什么响应:

这里首先要创建表,我们分别创建了一个有符号和一个无符号的 tinyint 类型:

mysql> create table test1(
    -> class tinyint,
    -> age tinyint unsigned);
Query OK, 0 rows affected (0.05 sec)

其次来看看三种插入情况:

2.1.1 插入合法数据

mysql> insert test1(class, age) values(27, 18);
Query OK, 1 row affected (0.03 sec)

2.1.2 插入边界数据

mysql> insert test1(class, age) values(-128, 255);
Query OK, 1 row affected (0.01 sec)

2.1.3 插入不合法数据

对于有符号数(-∞, -128)∪(128, +∞) 对于无符号数(-∞, 0)∪(255, +∞) MySQL会直接报错,不允许插入:

​​​​​​​mysql> insert test1(class, age) values(-129, -1); 
ERROR 1264 (22003): Out of range value for column 'class' at row 1

这里就可以得到结论:

2.1.4 结论

如果超过存储范围,MySQL会直接拦截用户操作确保数据的合法性。这保证了MySQL存储数据的绝对安全,同时倒逼程序员存储合法的数据。

2.2 bit [n]

bit 默认为 1bit ,可以使用 bit[n] ,指定 bit 的位数,最多为 64bit。

下面一起来验证一下,首先还是创建一个表:

mysql> create table test2(
    -> haha bit);
Query OK, 0 rows affected (0.03 sec)

现在来插入数据,先插入 0 和 1 ,发现都可以插入成功。当插入 2 时,MySQL会直接报错:

mysql> insert test2 values(0); 
Query OK, 1 row affected (0.00 sec) 

mysql> insert test2 values(1); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert test2 values(2); 
ERROR 1406 (22001): Data too long for column 'haha' at row 1

2.3 float [(m, d)] [unsigned] 

m:显示总位数(整数部分+小数部分) d:指定小数位数

可以看到 m 和 d 也是使用 [] 的,所以如果不指定精度,MySQL会使用默认的精度,可以自己在自己的 MySQL 上插入数据进行验证。

此外, float 的无符号类型并不会像 tinyint 一样,将返回扩大到非负的2倍(127->255),而是直接采用截断,只可以使用有符号类型的非负数部分,例如 [-99.99, 99.99] 的无符号范围是 [0, 99.99] 。

2.3.1 float 特性

下面列出我个人总结的关于 float 存储的两个特性:

特性1:存储的整数部分位数为 m - d ,如果位数多余该范围则MySQL会报错

特性2:存储的小数部分如果多余 d,则 MySQL会四舍五入,但五入后也要满足特性1

然后我们使用 MySQL 来验证:

首先建一个表,列属性设置为 float(4, 2):

mysql> create table test3(grades float(4, 2));
Query OK, 0 rows affected, 1 warning (0.05 sec)

2.3.2 插入整数部分大于 m-d 的数字

例如插入 101 :

mysql> insert test3 values(101);
ERROR 1264 (22003): Out of range value for column 'grades' at row 1

可以看到 MySQL 直接报错,不允许插入

2.3.3 插入小数部分大于 d 的数字 

例如插入 6.12222 和 71.8888:


可以看到前一个数字被四舍至6.12,后一个数字被五入到71.89了!

2.3.4 插入一个五入后整数部分会多余 m-d 的数字

例如插入 99.996,该数字会被五入到100.00,整数部分已经大于 m-d:

mysql> insert test3 values(99.996);
ERROR 1264 (22003): Out of range value for column 'grades' at row 1

可以看到也是不允许插入的!

2.3.5 float 范围总结

综上所述,其实 float 的存储范围也很简单, 正负 (m-d)个9 . (d个9)

2.4 decimal [(m, d)] [unsigned]

decimal 也是浮点数,但是它和 float 相比,精度更高,存储数据更加准确,下面来验证一下:

创建表:

mysql> create table test4(
    -> ff float(10, 5),
    -> dd decimal(10, 5));
Query OK, 0 rows affected, 1 warning (0.04 sec)

插入相同数据:

mysql> insert test4 values(12345.123456789, 12345.123456789);
Query OK, 1 row affected, 1 warning (0.01 sec)

查看表中数据:

可以看到, float 与 decimal 虽然使用相同精度,插入相同数据,但是最后存储的结果却不一样,decimal 仍可以进行正常的四舍五入,但是 float 的数据已经发生了一些变化。

三、文本类型

3.1 char(L)

char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255 在 utf8 中,一个字符为 3Byte。

3.2 varchar(L)

varchar(L):可变长度字符串,可变长度字符串,L表示字符长度,最大长度值可以为21845,即 65535 Byte

3.3 char 与 varchar

关于 char 与 varchar 的用法与区别,这里一起来展开:

从上图代码可以看出来,我们都为 char 和 varchar 设置了 L = 3 ,而它们也确实可以正常插入不大于 3 个字符的数据,那么这里 char 与 varchar 有什么区别吗?

其实 char 与 varchar 的区别就类似于 vector 中的 resize() 与 reserve():

char 是预先开辟空间,无论你插入了几个字符,占用的内存都是一样的
varchar 是用多少给多少,只要不多余 L 个字符都可以,占用的内存随数据变化而变化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【贪心算法】贪心算法

贪心算法简介 1.什么是贪心算法2.贪心算法的特点3.学习贪心的方向 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.什么是贪心算法 与其说是…

MYSQL数据库——MYSQL管理

MYSQL数据库安装完成后,自带四个数据库,具体作用如下: 常用工具 1.mysql 不是指mysql服务,而是指mysql的客户端工具 例如: 2.mysqladmin 这是一个执行管理操作的客户端程序,可以用它来检查服务器的配置和…

vs2022快捷键异常解决办法

安装了新版本的vs2022,安装成功后,发现快捷键发生异常,之前常用的快捷键要么发生改变,要么无法使用,比如原来注释代码的快捷键是ctrlec,最新安装版本变成了ctrlkc,以前编译代码的快捷键是F6或者…

算法入门-贪心1

第八部分:贪心 409.最长回文串(简单) 给定一个包含大写字母和小写字母的字符串 s ,返回通过这些字母构造成的最长的回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串…

记录小数点

记录data frame小数点后面省略掉0的问题 iloc得到的series .to_list() 0被省略掉 to_list() 可能会将浮点数转换为默认格式。先将数据转换为字符串以保留格式 df_2708.iloc[2,:].apply(lambda x: f{x:.3f}).to_list()自定义保留小数点后几位 def formatter(value):return &q…

自动驾驶自动泊车场景应用总结

自动泊车技术是当前智能驾驶技术的一个重要分支,其目标是通过车辆自身的感知、决策和控制系统,实现车辆在有限空间内的自主泊车操作。目前自动泊车可分为半自动泊车、全自动泊车、记忆泊车、自主代客泊车四种产品形态,其中, 根据搭载传感器和使用场景的不同,全自动泊车又可…

OpenGL笔记二十一之几何类设计

OpenGL笔记二十一之几何类设计 —— 2024-09-16 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记二十一之几何类设计1.运行1.1.立方体运行1.2.球体运行 2.几何类搭建1.立方体分析2.球体分析3.图片资源文件4.关键实现4.1.geometry.h4.2.geometry.cpp…

vue3使用provide和inject传递异步请求数据子组件接收不到

前言 一般接口返回的格式是数组或对象,使用reactive定义共享变量 父组件传递 const data reactive([])// 使用settimout模拟接口返回 setTimeout(() > {// 将接口返回的数据赋值给变量Object.assign(data, [{ id: 10000 }]) }, 3000);provide(shareData, dat…

ip映射域名,一般用于mysql和redis的固定映射,方便快捷打包

举个例子 192.168.3.101mysql映射到mysql.smartlink.com 192.168.3.101redis redis.smartlink.com 要将IP地址映射到域名,可以通过几种方式实现,包括修改本地主机文件(仅适用于本地开发环境)、设置DNS解析(适用于生产环…

一文入门生成式AI(理解ChatGPT的原理)

一、什么是生成式AI? 以ChatGPT为代表的生成式AI,是对已有的数据和知识进行向量化的归纳,总结出数据的联合概率。从而在生成内容时,根据用户需求,结合关联字词的概率,生成新的内容。 可以这么联想&#x…

el-table表格的展开行,初始化的时候展开哪一行+设置点击行可展开功能

效果: 表格展开行官网使用: 通过设置 type"expand" 和 Scoped slot 可以开启展开行功能,el-table-column 的模板会被渲染成为展开行的内容,展开行可访问的属性与使用自定义列模板时的 Scoped slot 相同。 但是这种方法…

解决:Vue 中 debugger 不生效

目录 1,问题2,解决2.1,修改 webpack 配置2.2,修改浏览器设置 1,问题 在 Vue 项目中,可以使用 debugger 在浏览器中开启调试。但有时却不生效。 2,解决 2.1,修改 webpack 配置 通…

【农信网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【ArcGIS Pro实操第七期】栅格数据合并、裁剪及统计:以全球不透水面积为例

【ArcGIS Pro实操第七期】批量裁剪:以全球不透水面积为例 准备:数据下载ArcGIS Pro批量裁剪数据集1 数据拼接2 数据裁剪3 数据统计:各栅格取值3.1 栅格计算器-精确提取-栅格数据特定值3.2 数据统计 4 不透水面积变化分析 参考 准备&#xff1…

基于springboot+vue+uniapp的驾校报名小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

OpenCV高阶操作

在图像处理与计算机视觉领域,OpenCV(Open Source Computer Vision Library)无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下,采样 下采样(Downsampling) 下采样通常用于减小图像的…

架构师备考的一些思考(四)

前言 对于数学,我们之前学的是对的,但不是真的,所以我们没有数学思维。 对于计算机,我们学校教的是对的,但不是真的,所以仅仅从学校学习知识的应届毕业生,不论985,211,本科&#xff…

回归预测|基于黑翅鸢优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 含基础LightGBM

回归预测|基于黑翅鸢优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 含基础LightGBM 文章目录 一、基本原理1. 数据准备2. LightGBM模型构建3. BKA优化4. 模型评估5. 结果分析总结 二、实验结果三、核心代码四、代码获取五、总结 回归预测|基于黑翅鸢优化LightGBM的数…

【SpringCloud】服务注册与发现 - Eureka

目录 服务注册/服务发现-Eureka背景问题描述解决思路什么是注册中心CAP 理论常见的注册中心 Eureka 介绍搭建Eureka Server创建Eureka-server 子模块引入eureka-server依赖项目构建插件完善启动类编写配置文件启动服务 服务注册引入eureka-client依赖完善配置文件启动服务 服务…

Linux基础---10进程管理

一.查看和关闭进程 1.查看进程 基础指令: ps -efPID 进程编号,PPID 父进程编号, CMD命令名称 进阶指令–查看进程的树形结构: yum install psmisc -y #首先安装psmisc后可直接使用pstreepstree2.关闭进程 要想关闭某个或多个进程需要知道…