MySQL的数据类型和细节
1.整型
| 数值类型 | 字节 | 描述 |
|---|---|---|
TINYINT[UNSIGNED] | 1 | 很小的整数,默认有符号 [-128,127]/[0,255] |
SMALLINT[UNSIGNED] | 2 | 较小的整数,默认有符号 [-32768,32767]/[0,65535] |
MEDIUMINT[UNSIGNED] | 3 | 中等的整数,默认有符号 [-8388608,8388607]/[0,16777215] |
INT[UNSIGNED]/INTEGER[UNSIGNED] | 4 | 标准的整数,默认有符号 [-2147483648,2147483647]/[0,4294967295] |
BIGINT[UNSIGNED] | 8 | 较大的整数,默认有符号 [-9223372036854775808,9223372036854775807]/[0,18446744073709551615] |
如果插入了超出对应字段合法范围的数据,MySQL 就会拒绝插入的行为,因此在 MySQL 看来,所有能插入的数据都是合法的,因此数据类型实际上就是一种约束(我们以后再来好好理解这个词,现在先简单了解一下),倒逼程序员进行正确的操作,保证数据插入的合法性。
2.二进制类型
| 二进制类型 | 描述 |
|---|---|
BIT(M) | 位类型,M 为指定位数,默认值为 1,范围为 [1-64] |
TINYBLOB | 很小的二进制数据 |
BLOB | 二进制大对象 |
MEDIUMBLOB | 中等大小的二进制数据 |
LONGBLOB | 较大的二进制数据 |
MySQL 通常按照 ASCII 码值显示的,因此无法直接显示位类型的 0/1 ,我们可以使用十进制来查看(例如 select hex(bit_data) from table_name;)。
而因此插入的一些二进制值达到 ASCII 的合法范围时,就会显示出对应的 ASCII 字符。
3.小数类型
| 小数类型 | 字节 | 描述 |
|---|---|---|
FLOAT[(M,D)][UNSIGNED] | 4 | 单精度浮点数,默认有符号,M 为显示长度,D 为小数位数/精度 |
DOUBLE[(M,D)][UNSIGNED] | 双精度浮点数,默认有符号 | |
DECIMAL(M,D)[UNSIGNED] | 定点数,适用于存储精确的小数,默认有符号 |
浮点类型如果规定了小数点的位数,则显示的长度里包含小数点规定的位数(但是不包含小数点),例如插入 10.0 会显示 10.00,插入 100.1 会插入失败(实际插入的是 100.10)。
但是如果插入多余的小数位,会发生四舍五入的存储,例如插入 10.016,实际插入的值是 10.02。
因此也无法插入 99.996,但是允许插入 99.9900001。
一般浮点数的数值很大,一般不会关心一个浮点数的大小,用户只需要根据自己的需求设置显示位数和精度即可。
浮点类型可能存在较大的数据缺失问题,而定点数类型则可以尽可能规避这个问题(如果希望精度更高就需要使用 decimal 类型)。
4.文本类型
| 文本类型 | 描述 |
|---|---|
CHAR(L) | 定长字符串,L 为存储长度,最大值为 255,单位是一个“字符” |
VARCHAR(L) | 变长字符串,L 的最大值为 65535 个“字节”,但是其中有 1~3 个字节需要记录数据大小,因此有效字节数为 65532。在 utf8 中也就是最多 65532/3=21844 个字符(*3),在 gbk 中也就是 65532/2=32766(也就是说,具体字符个数和所用编码密切相关)。 |
BINARY | 定长二进制字符串 |
VARBINARY | 变长二进制字符串 |
TINYTEXT | 很小的文本数据 |
TEXT | 普通的文本数据 |
MEDIUMTEXT | 中等的文本数据 |
LONGTEXT | 较大的文本数据 |
不定长的字符串可以会影响查询效率,但是空间利用率较高。在使用 varchar 类型是,上限就是 L,是“有多少用多少,不超过 L”,而定长的字符串是“就算只有这么多,也会占用 L”,两者的区别类似 C/C++ 的 char s[size] 和 std::string str 的区别。
另外需要注意一个汉字字符也是一个字符,这点很特殊,即使一个中文汉字用多个字节表示,也依旧可以使用 char(1) 来表示(但是需要注意有时候会报字符集不匹配的错误)。
疑惑:关于
VARCHAR(L)中的L是字符个数还是字节个数,貌似不同版本的MySQL是不一样的。
5.时间类型
| 时间类型 | 字节 | 描述 |
|---|---|---|
DATE | 3 | 日期值,格式为 yyyy-mm-dd,对于时间精度只需要到天数时就使用该类型,需要程序员自己登记修改 |
DATETIME | 8 | 日期和时间值,格式为 yyyy-mm-dd HH:ii:ss,需要程序员自己登记修改 |
TIMESTAMP | 4 | 时间戳,格式和 DATETIME 一样,该字段会自动填入(若使用 UPDATE table_name set field_name='new_value' 更新同一项的其他字段数据时,将会自动更新),因此时间戳经常被用于数据被更新的最近时间点,无需程序员自己登记修改 |
TIME | 时间 | |
YEAR | 年份 |
6.复合类型
| 复合类型 | 描述 |
|---|---|
ENUM | 枚举(单选)。只是设定若干选项,最终在单元格中只存储了一个实际值,枚举值的大小范围为 [1,65535],使用方法和 C/C++ 的枚举体类似,枚举字段的数据只允许填入之前枚举出的所有值。并且,如果插入的数字是合法范围的值,也会转为为对应的枚举标识(如果忽略该字段会自动填入 NULL,使用 0 作为插入会导致非法操作) |
SET | 集合(多选)。和枚举不同,一个列可以拥有多个值,多个值作为一个字段数据插入的时候,整体看作一个字符串即可。并且我们还可以使用数字来插入数据,该数字为 0001 代表四个元素中的第一个元素,若为 0101 则代表四个元素中的第一、第三个元素(如果忽略该字段会自动填入 NULL,使用 0 作为插入会导致为空) |
使用 FIND_IN_SET(SUB, STR_LIST) 可以来查找集合中是否有某“一个”元素,若 sub 这个单一元素在 str_list(不要在逗号后面加空格) 集合中则返回其下标,若不存在则返回 0。
而如果我们直接使用 where field_name='new_value' 子句来查询集合时,采用的是严格匹配法,我们需要不严格匹配时,就需要使用上述 find_in_set() 的接口。
也就是使用 SELECT * FROM table_name WHERE FIND_IN_SET(sub, STR_LIST) 来查询,这样只要有一个元素存在于集合字段中,就可以被查询出来。
而如果希望包含多个元素,就需要使用 AND 来级联多个接口,也就是使用 SELECT * FROM table_name WHERE FIND_IN_SET(sub_1, STR_LIST) AND FIND_IN_SET(sub_2, STR_LIST) AND ...
补充:
NULL和(空)是两种东西。
7.布尔类型
| 布尔类型 | 描述 |
|---|---|
BOOL | 使用 0/1 表示“真/假” |
使用起来较简单,略,待补充…
相关文章:
MySQL的数据类型和细节
1.整型 数值类型字节描述TINYINT[UNSIGNED]1很小的整数,默认有符号 [-128,127]/[0,255]SMALLINT[UNSIGNED]2较小的整数,默认有符号 [-32768,32767]/[0,65535]MEDIUMINT[UNSIGNED]3中等的整数,默认有符号 [-8388608,8388607]/[0,16777215]…...
自建AWS S3存储服务
unsetunset前言unsetunset AWS S3(Amazon S3,全名为亚马逊简易存储服务),是亚马逊公司利用其亚马逊网络服务系统所提供的网络在线存储服务。我常用的很多SaaS服务中提供的文件存储功能,底层也都是AWS S3,比…...
『论文阅读|研究用于视障人士户外障碍物检测的 YOLO 模型』
研究用于视障人士户外障碍物检测的 YOLO 模型 摘要1 引言2 相关工作2.1 障碍物检测的相关工作2.2 物体检测和其他基于CNN的模型 3 问题的提出4 方法4.1 YOLO4.2 YOLOv54.3 YOLOv64.4 YOLOv74.5 YOLOv84.6 YOLO-NAS 5 实验和结果5.1 数据集和预处理5.2 训练和实现细节5.3 性能指…...
LeetCode--1445. 苹果和桔子
文章目录 1 题目描述2 测试用例3 解题思路 1 题目描述 表: Sales ------------------------ | Column Name | Type | ------------------------ | sale_date | date | | fruit | enum | | sold_num | int | ------------------------(sale…...
Java基础知识
一、标识符规范 标识符必须以字母(汉字)、下划线、美元符号开头,其他部分可以是字母、下划线、美元符号,数字的任意组合。谨记不能以数字开头。java使用unicode字符集,汉字也可以用该字符集表示。因此汉字也可以用作变量名。 关键字不能用作…...
并发编程-Synchronized
什么是Synchronized synchronized是Java提供的一个关键字,Synchronized可以保证并发程序的原子性,可见性,有序性。 我们会把synchronized称为重量级锁。主要原因,是因为JDK1.6之前,synchronized是一个重量级锁相比于J…...
C语言——从头开始——深入理解指针(1)
一.内存和地址 我们知道计算上CPU(中央处理器)在处理数据的时候,是通过地址总线把需要的数据从内存中读取的,后通过数据总线把处理后的数据放回内存中。如下图所示: 计算机把内存划分为⼀个个的内存单元,每…...
微信小程序-绑定数据并在后台获取它
如图 遍历列表的过程中需要绑定数据,点击时候需要绑定数据 这里是源代码 <block wx:for"{{productList}}" wx:key"productId"><view class"product-item" bindtap"handleProductClick" data-product-id"{{i…...
【删除数组用delete和Vue.delete有什么区别】
删除数组用delete和Vue.delete有什么区别? 在 JavaScript 中,delete 和 Vue.js 中的 Vue.delete 是两个完全不同的概念,它们在删除数组元素时的作用和效果也有所不同。 JavaScript 中的 delete 关键字: 在原生 JavaScript 中&a…...
【QT+QGIS跨平台编译】之四十二:【QWT+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、QWT介绍二、QWT下载三、文件分析四、pro文件五、编译实践5.1 Windows下编译4.2 Linux下编译5.3 MacOS下编译一、QWT介绍 QWT是一个基于Qt框架的开源C++库,用于创建交互式的图形用户界面。它提供了丰富的绘图和交互功能,可以用于快速开发图形化应用程序。 QWT包…...
yum方式快速安装mysql
问题描述 使用yum的方式简单安装了一下mysql,对过程进行简单记录。 步骤 ①安装wget和vim sudo yum -y install wget vim②下载mysql的rpm包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm③升级和更新rpm包 sudo rpm -Uv…...
基于Java的家政预约管理平台
功能介绍 平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、家政详情、家政入驻、用户中心模块。后台功能包括:家政管理、分类管理…...
C语言前世今生
C语言前世今生 C语言的发展历史 C语言于1972年11月问世,1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局(American National Standards Institute,简称ANSI)…...
android aidl进程间通信封装通用实现-用法说明
接上一篇:android aidl进程间通信封装通用实现-CSDN博客 该aar包的使用还是比较方便的 一先看客户端 1 初始化 JsonProtocolManager.getInstance().init(mContext, "com.autoaidl.jsonprotocol"); //客户端监听事件实现 JsonProtocolManager.getInsta…...
【Java中23种设计模式-单例模式2--懒汉式线程不安全】
加油,新时代打工人! 今天,重新回顾一下设计模式,我们一起变强,变秃。哈哈。 23种设计模式定义介绍 Java中23种设计模式-单例模式 package mode;/*** author wenhao* date 2024/02/19 09:16* description 单例模式--懒…...
【后端高频面试题--Linux篇】
🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Linux篇 往期精彩内容Windows和Linux的区别?Unix和Linux有什么区别…...
网络原理HTTP/HTTPS(2)
文章目录 HTTP响应状态码200 OK3xx 表示重定向4xx5xx状态码小结 HTTPSHTTPS的加密对称加密非对称加密 HTTP响应状态码 状态码表⽰访问⼀个⻚⾯的结果.(是访问成功,还是失败,还是其他的⼀些情况…).以下为常见的状态码. 200 OK 这是⼀个最常⻅的状态码,表⽰访问成功 2xx都表示…...
【Java中23种设计模式-单例模式2--懒汉式2线程安全】
加油,新时代打工人! 简单粗暴,学习Java设计模式。 23种设计模式定义介绍 Java中23种设计模式-单例模式 Java中23种设计模式-单例模式2–懒汉式线程不安全 package mode;/*** author wenhao* date 2024/02/19 09:38* description 单例模式…...
由LeetCode541引发的java数组和字符串的转换问题
起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣(LeetCode) 这个题目本身是比较简单的,所以就不讲具体思路了。问题出在最后方法的返回值处,要将字符数组转化为字符串,第一次写的时候也没思考直…...
HTTP 头部- Origin Referer
Origin & Referer Origin Header 示例 Origin 请求头部是一个 HTTP 头部,它提供了发起请求的网页的源(协议、域名和端口)信息。它通常在进行跨域资源共享(CORS)请求时使用,以便服务器可以决定是否接受…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
