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

MySQL(数据类型)

目录

1. 数值类型

2. bit类型

3.小数类型

3. 字符串类型

4 日期和时间类型

5. enum和set


1. 数值类型

对标C语言:
tinyint->char(1字节):       有符号:127 ~ 255                             无符号:0 ~ -128。
smallint->shot int(2字节):有符号:32767 ~ 65535                     无符号:0 ~ -32768。
mediumint(3字节)              有符号:8388607 ~ 16777215           无符号:0 ~ -8388608。
int(4字节)                           有符号:2147483647 ~ 4294967295 无符号:0 ~ -2147483648。
bigint->long long(8字节)    有符号:9223372036854775807 ~ 18446744073709551615 无符号:0 ~ -9223372036854775808。
插入数值必须在指定的类型范围之类,否则插入失败。反之插入到MySQL中的数据一定是合法的,也就是一种约束(使用者)。
在语言中把一个超过该类型范围的值赋给该类型,可能会产生截断或者类型转换,在MySQL里直接拦截。
1. 下面用 tinyint 测试数值越界情况
MySQL 中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过 UNSIGNED 来说明某个字段是无符号的
无符号案例:

2. bit类型

bit [ (M) ]  : 位字段类型。 M 表示每个值的位数,范围从 1 64 。如果 M 被忽略,默认为 1

3.小数类型

1. float [ (m, d) ] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。
示例:float(4.2)
小数位数不足补0,超过小数位数按四舍五入进位,99.996 进位成 100.00,超过总长度(d),则插入失败。
下面float长度为默认的
插入较长的值会导致精度丢失。
2. decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

decimal整数最大位数m65。支持小数最大位数d30。如果d被省略,默认为0.如果m被省略, 默认是10

decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal float 很像,但是有区别 : float和 decimal 表示的精度不一样。

3. 字符串类型

1. char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
在Innodb一个汉字占3个字节,但插入的数据明显超过3个字节,还能插入进去,在MySQL中只有字符的概念,比如'a',1 2 3 4,一个汉字,都称为1个字符,虽然汉字占3个字节,但被称为一个字符,所以能插入2个字符,超过2字符就插入失败。
2. varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

varchar最大长度为65535(包括用于记录实际分配的大小1~3字节)个字节,并不是字符,在编码为utf8mb4最大只能开辟16383个字符。

varchar 长度可以指定为 0 65535 之间的值,但是有 1 - 3 个字节用于记录数据大小,所以说有效字
节数是 65532
关于 varchar(len),len 到底是多大,这个 len 值,和表的编码密切相关:
当我们的表的编码是utf8mb4时, varchar(n) 的参数 n 最大值是 65532/4=16383[因为utf8mb4中,一个字符占用4个字节 ],如果编码是utf8,varchar(n) 的参数 n 最大是 65532/3=21845(因为utf8中,一个字符占用3字节)。

3. char和varchar的区别

char类似c语言开辟了一段定长大小的空间,varchar大小则是变长的。

比如 char和varchar的大小都为20,后续不管插入多少个字符,char都只给你20个,varchar则会根据你插入了多少个字符而分配多少个字符。

utf8为例:

如何选择定长或变长字符串?
1. 如果数据确定长度都一样,就使用定长( char ),比如:身份证,手机号, md5
2. 如果数据长度有变化 , 就使用 varchar,  比如:名字,地址,但是你要保证最长的能存的进去。
3. 定长的磁盘空间比较浪费,但是效率高。
4. 变长的磁盘空间比较节省,但是效率低。
5. 定长的意义是,直接开辟好对应的空间。
6. 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

4 日期和时间类型

常用的日期有如下三个:
1. date:           日期 'yyyy - mm - dd' (年月日) ,占用三字节。
2. datetime:    时间日期格式 'yyyy - mm -dd HH:ii:ss' (年月日+时分秒) 表示范围从 1000 9999 ,占用八字节。
3. timestamp: 时间戳,从 1970 年开始的 yyyy - mm - dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节。
创建表:
create table birthday (t1 date, t2 datetime, t3 timestamp);

插入数据:

insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1')

timestamp不需要手动插入,默认会用当前的时间戳缺省,会随之时间自动变换。

比如评论时会自动显示当前时间,过了一段时间又会更新。

5. enumset

enum:枚举,单选类型; enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535

个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,多选类型;set('选项值1','选项值2','选项值3', ...)

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“ 数字 ,因为这些选项的每个选项值依次对应数: 1,2,4,8,16,32 .... 最多64 个。
创建表:
create table test8( name varchar(20), age enum('男','女'), hobby set('足球','看电影','代码','看书','旅游') );

插入数据:

enum可以用定义时的字面值,也可以用枚举常量(1 ~ 65535),只能选择其中一个。

set可以用定义时的字面值,可以选择多个,但常量代表对应的二进制位数(1~64),比如3-> 11,也就是前2个数据,1就是1,也就是前1个数据。

set的查询

这种写法是严格匹配的,并不会把自己别的爱好也显示出来。

find_in_set函数

find_in_set函数的返回结果如果是非0就代表真,也是集合对应的下标(从1开始)

这样就能显示包含该查询数据,也能包含自己其他的数据。

相关文章:

MySQL(数据类型)

目录 1. 数值类型 2. bit类型 3.小数类型 3. 字符串类型 4 日期和时间类型 5. enum和set 1. 数值类型 对标C语言: tinyint->char(1字节): 有符号:127 ~ 255 无符号:0 ~ -128。 smalli…...

pytorch中的tqdm库

tqdm 是一个 Python 的进度条库,名字来源于阿拉伯语 "taqaddum"(意思是“进步”)。它以简单易用、高效著称,常用于循环操作中显示进度信息。 基本用法 1. 普通循环 tqdm 可以轻松为 for 循环添加进度条: …...

NoSQL大数据存储技术测试(5)MongoDB的原理和使用

单项选择题 第1题 关于 MongoDB 集群部署下面说法不正确的是() 已经不使用主从复制的模式 在实际应用场景中, Mongodb 集群结合复制集和分片机制 MongoDB 支持自动分片, 不支持手动切分 (我的答案) 每…...

【Golang】Go语言编程思想(六):Channel,第四节,Select

使用 Select 如果此时我们有多个 channel,我们想从多个 channel 接收数据,谁来的快先输出谁,此时应该怎么做呢?答案是使用 select: package mainimport "fmt"func main() {var c1, c2 chan int // c1 and …...

Vue2简介

一、官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 二、介绍与描述 动态构建用户界面的渐进式 JavaScript 框架 作者: 尤雨溪 三、Vue 的特点 遵循 MVVM 模式 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发 它本身只关注 UI, 也可以引入其它第三…...

EasyPlayer.js播放器如何在iOS上实现低延时直播?

随着流媒体技术的迅速发展,H5流媒体播放器已成为现代网络视频播放的重要工具。其中,EasyPlayer.js播放器作为一款功能强大的H5播放器,凭借其全面的协议支持、多种解码方式以及跨平台兼容性,赢得了广泛的关注和应用。 那么要在iOS上…...

ChatGPT Pro是什么

ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格:20美元/月。 • 目标用户:针对个人用户设计。 • 主要特点: • 在高峰期响应速度更快。 • 使用高级模型(如 GPT-4…...

基于Springboot汽车资讯网站【附源码】

基于Springboot汽车资讯网站 效果如下: 系统主页面 汽车信息页面 系统登陆页面 汽车信息推荐页面 经销商页面 留言反馈页面 用户管理页面 汽车信息页面 研究背景 随着信息技术的快速发展和互联网的普及,互联网已成为人们查找信息的重要场所。汽车资讯…...

MySQL-DQL之数据表操作

文章目录 零. 准备工作一. 简单查询1.查询所有的商品.2.查询商品名和商品价格.3.查询结果是表达式(运算查询):将所有商品的价格10元进行显示. 二. 条件查询1. 比较查询2. 范围查询3. 逻辑查询4. 模糊查询5. 非空查询 三. 排序查询四. 聚合查询…...

Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)

前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持,mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑,欢迎大家Fork 代码,多多 Start哦~ Multi person online edit 多人协同编辑器…...

vue 给div增加title属性

省略号 移入显示文字 在很多时候,我们页面上其实有时候展示不出来很多很多文字的,这个时候我们就不得不对这个文字进行处理,但是我们鼠标放到文字上时,还想展示所有的文字,这种方式其实有2种 一Tooltip 文字提示 第一…...

设计模式之工厂模式:从汽车工厂到代码工厂

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 工厂模式概述 想象一下你走进一家4S店准备买车。作为顾客,你不需要知道汽车是如何被制造出来的,你只需要告诉销售顾问&a…...

人脸识别Adaface之libpytorch部署

目录 1. libpytorch下载2. Adaface模型下载3. 模型转换4. c推理4.1 前处理4.2 推理4.3 编译运行4.3.1 写CMakeLists.txt4.3.2 编译4.3.3 运行 1. libpytorch下载 参考: https://blog.csdn.net/liang_baikai/article/details/127849577 下载完成后,将其解…...

vue3+echarts+websocket分时图与K线图实时推送

一、父组件代码&#xff1a; <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…...

小程序开发实战项目:构建简易待办事项列表

随着移动互联网的飞速发展&#xff0c;小程序以其便捷性、即用即走的特点&#xff0c;成为了连接用户与服务的重要桥梁。无论是电商平台的购物助手&#xff0c;还是餐饮行业的点餐系统&#xff0c;小程序都在各个领域发挥着巨大的作用。 小程序开发基础 1. 小程序简介 小程序是…...

SD Express 卡漏洞导致笔记本电脑和游戏机遭受内存攻击

Positive Technologies 最近发布的一份报告揭示了一个名为 DaMAgeCard 的新漏洞&#xff0c;攻击者可以利用该漏洞利用 SD Express 内存卡直接访问系统内存。 该漏洞利用了 SD Express 中引入的直接内存访问 (DMA) 功能来加速数据传输速度&#xff0c;但也为对支持该标准的设备…...

前端node环境安装:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

需求&#xff1a;在做前端开发的时候&#xff0c;有的时候 这个项目需要 node 14 那个项目需要 node 16&#xff0c;我们也不能卸载 安装 。这岂不是很麻烦。这个时候 就需要 一个工具 来管理我们的 node 版本和 npm 版本。 下面就分享一个 nvm 工具 用来管理 node 版本。 这个…...

java之集合(详细-Map,Set,List)

1集合体系概述 1.1集合的概念 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。 1.2集合分类 集合分为单列集合和多列集合 Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff…...

常见LeetCode-Saw200

用来记录需要知道见过的题型&#xff1a; LeetCode2-两数相加 说明&#xff1a;以链表的形势给了你每个位的数字&#xff0c;而且是逆序&#xff0c;直接从开头&#xff08;个位&#xff09;遍历相加。带上进位即可。有一个为空就直接计算另一个和进位。 LeetCode-3.无重复字符…...

Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)

效果展示&#xff1a; 在这里&#xff0c;我把视频名称&#xff08;Json&#xff09;和对应的视频资源都放在了StreamingAssets文件夹下&#xff0c;以便于打包后&#xff0c;客户还可以自己在外部增加、删除、修改对应的视频资料。 如有需要&#xff0c;请联细抠抠。...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...