【MySQL】 常见数据类型

MySQL常见数据类型
    • 1.整数类型
    • 2.浮点数类型
    • 3.定点数类型
    • 4.bit类型
    • 5.字符串类型
      • 5.1char和varchar类型
      • 5.2日期类型和时间类型
      • 5.3enum和set类型

1.整数类型

整数类型默认都是有符号整数

类型名称

字节数

类型说明

tinyint

1

带符号的范围-128127,无符号范围0255

smallint

2

带符号的范围-2^15 ~ 2^15 - 1,无符号 2^16 - 1

mediumint

3

带符号的范围-2^23 ~ 2^23 - 1,无符号 2^24 - 1

int

4

带符号的范围-2^31 ~ 2^31 - 1,无符号 2^32 - 1

bigint

8

带符号的范围-2^63 ~ 2^63 - 1,无符号 2^64 - 1

整数类型的可选属性有三个:

  • M : 表示显示宽度,M的取值范围是(0, 255)。例如,int(6):当数据宽度小于6位的时候在数字前面需要用字符填满宽度。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效。
  • UNSIGNED : 无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),无符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设置为无符号类型。
  • ZEROFILL : 0填充,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指定了ZEROFILL只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。也就是说,int(M),必须和UNSIGNED ZEROFILL一起使用才有意义。如果整数值超过M位,就按照实际位数存储。只是无须再用字符 0 进行填充

使用示例:

创建test表

create table test(num int(6) zerofill);

插入数据:

insert into test values(22);

查看数据:

select num from test;

结果:

mysql> select num from test-> ;
+--------+
| num    |
+--------+
| 000022 |
+--------+
1 row in set (0.00 sec)

2.浮点数类型

浮点数和定点数类型的特点是可以处理小数 ,你可以把整数看成小数的一个特例,因此,浮点数和定点数的使用场景,比整数大多了。 MySQL支持的浮点数类型,分别是 FLOAT、DOUBLE、REAL

类型名称

字节数

类型说明

float

4

表示单精度浮点数

double

8

表示双精度浮点数

real

8/4

默认就是 double。如果把 SQL 模式设定为启用“ REAL_AS_FLOAT ”,那么,MySQL 就认为real 是 float

使用示例:

语法:

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

小数:有符号float(4,2)表示的范围是-99.99 ~ 99.99,无符号的float(4,2)表示的范围是0 ~ 99.99,MySQL在保存值时会进行四舍五入

#创建表
create table tt6(id int, salary float(4,2));
#插入数据
insert into tt6 values(100, -99.99);
insert into tt6 values(101, -99.991); #多的这一点被拿掉了
#查询数据
select id, salary from tt6;
#结果
+------+--------+
| id | salary |
+------+--------+
| 100 | -99.99 |
| 101 | -99.99 |
+------+--------+
2 rows in set (0.00 sec)

3.定点数类型

MySQL中的定点数类型只有 DECIMAL 一种类型。

语法:

decimal(M, D) [unsigned] : 定点数M指定长度,D表示小数点的位数
  • decimal(5,2) 表示的范围是 -999.99 ~ 999.99

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

  • 0<=M<=65,0<=D<=30,D<M

DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节。也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值范围可以更大一些。定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准的。当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理

建议:如果希望小数的精度高,推荐使用decimal

4.bit类型

基本语法:

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

使用示例:

#创建表
create table tt4(id int, a bit(8));
#插入数据
insert into tt4 values(10, 10);
#查询数据
select * from tt4; 
#结果
+------+------+
| id | a 	  |
+------+------+
| 10 | 		  |
+------+------+
1 row in set (0.00 sec)
#发现很怪异的现象,a的数据10没有出现

bit使用的注意事项:

bit字段在显示时,是按照ASCII码对应的值显示

#插入数据
insert into tt4 values(65, 65);
#查询结果
select * from tt4;
+------+------+
| id | a      |
+------+------+
| 10 |    	  |
| 65 | A 	  |
+------+------+

5.字符串类型

5.1char和varchar类型

类型名称

类型说明

char

固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

varchar

可变长度字符串,L表示字符长度,最大长度65535个字节

char语法:

char(L)

char使用示例:

#创建表
create table tt9(id int, name char(2));
#插入数据
insert into tt9 values(100, 'ab');
insert into tt9 values(101, '中国');
#查询结果
mysql> select * from tt9;
+------+--------+
| id | name 	|
+------+--------+
| 100 | ab 		|
| 101 | 中国 	   |
+------+--------+

说明:

  • char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

varchar语法:

varchar(L)

varchar使用示例:

#创建表
create table tt10(id int ,name varchar(6)); #表示这里可以存放6个字符
#插入数据
insert into tt10 values(100, 'hello');
insert into tt10 values(100, '我爱你,中国');
#查询结果
mysql> select * from tt10;
+------+--------------------+
| id | name 				|
+------+--------------------+
| 100 | hello 				|
| 100 | 我爱你,中国 			|
+------+--------------------+

说明:

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)

如何选择定长或变长字符串?

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

常用的日期有如下三个:

  • date :日期 ‘yyyy-mm-dd’ ,占用三字节
  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime完全一致,占用四字节

使用示例:

#创建表
create table birthday (t1 date, t2 datetime, t3 timestamp);
#插入数据
insert into birthday(t1,t2,t3) values('1997-7-1','2024-12-1 12:1:1','2024-12-1 12:1:1');
#查询结果
mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1         | t2                  | t3                  |
+------------+---------------------+---------------------+
| 1997-07-01 | 2024-12-01 12:01:01 | 2024-12-01 12:01:01 |
+------------+---------------------+---------------------+
1 row in set (0.00 sec)

TIMESTAMP类型通常占用4个字节的存储空间,而DATETIME类型则需要8个字节。TIMESTAMP类型的精度可以指定,范围从0到6,默认精度为6。这意味着TIMESTAMP可以存储到微秒级别的时间戳,而DATETIME类型则不能指定精度

5.3enum和set类型

类型名称

类型说明

enum:枚举

单选类型

set:集合

多选类型

  • ENUM类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时进行指定。设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。其所需要的存储空间由定义ENUM类型时指定的成员个数决定。当ENUM类型包含1~255个成员时,需要1个字节的存储空间;当ENUM类型包含256~65535个成员时,需要2个字节的存储空间;ENUM类型的成员个数的上限为65535个

  • SET表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为 64 。设置字段值时,可以取取值范围内的 0 个或多个值。当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的。SET类型在存储数据时成员个数越多,其占用的存储空间越大。注意:SET类型在选取成员时,可以一次选择多个成员,这一点与ENUM类型不同

使用示例:

有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),使用set类型,(男,女)[单选] ,使用enum类型

#创建表

create table votes(
username varchar(30),
hobby set('登山','游泳','篮球','武术'),
gender enum('男','女'));

#插入数据

insert into votes values('雷锋', '登山,武术', '男');
insert into votes values('Juse','登山,武术',2);

#查询

select * from votes where gender=2;

#查询结果

+----------+---------------+--------+
| username | hobby 		   | gender |
+----------+---------------+--------+
| Juse 	   | 登山,武术       |女 	    |
+----------+---------------+--------+

假如表中有这些数据,想查找所有喜欢登山的人:

+-----------+---------------+--------+
| username  | hobby         | gender |
+-----------+---------------+--------+
| 雷锋       | 登山,武术      | 男     |
| Juse      | 登山,武术       | 女     |
| LiLei     | 登山           | 男     |
| LiLei     | 篮球           | 男     |
| HanMeiMei | 游泳           | 女     |
+-----------+---------------+--------+

使用如下查询语句:

select * from votes where hobby='登山';

结果:

+----------+--------+--------+
| username | hobby  | gender |
+----------+--------+--------+
| LiLei    | 登山    | 男     |
+----------+--------+--------+

可以发现并不能查询出所有喜欢登山的人

集合查询使用find_ in_ set函数:

语法:

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0,str_list 用逗号分隔的字符串

查询爱好登山的人:

mysql> select * from votes where find_in_set('登山', hobby);
+----------+---------------+--------+
| username | hobby         | gender |
+----------+---------------+--------+
| 雷锋 	  | 登山,武术      |  男     |
| Juse     | 登山,武术       | 女     |
| LiLei    | 登山           | 男     |
+----------+---------------+--------+

MySQL的常用数据类型,就分享到这里了,如有错误还望指出,886!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始部署DeepSeek:基于Ollama+Flask的本地化AI对话系统

从零开始部署DeepSeek&#xff1a;基于OllamaFlask的本地化AI对话系统 一、部署背景与工具选型 在AI大模型遍地开花的2025年&#xff0c;DeepSeek R1凭借其出色的推理能力和开源特性成为开发者首选。本文将以零基础视角&#xff0c;通过以下工具链实现本地化部署&#xff1a; …

python旅游推荐系统+爬虫+可视化(协同过滤算法)

✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术&#xff0c;以实现从网站抓取旅游数据、个性化推荐和直观展…

以 Serverless 低成本的⽅式 快速在亚马逊云科技上部署 DeepSeek

2025年春节&#xff0c;最令人瞩目的无疑是DeepSeek的惊艳亮相&#xff0c;它以颠覆性的创新迅速席卷全球&#xff0c;成为街谈巷议的热点。无论是在地铁车厢里&#xff0c;还是公司茶水间&#xff0c;DeepSeek都成了人们津津乐道的话题。社交平台上&#xff0c;网友们争相分享…

win10 系统 自定义Ollama安装路径 及模型下载位置

win10 系统 自定义Ollama安装路径 及模型下载位置 由于Ollama的exe安装软件双击安装的时候默认是在C盘&#xff0c;以及后续的模型数据下载也在C盘&#xff0c;导致会占用C盘空间&#xff0c;所以这里单独写了一个自定义安装Ollama安装目录的教程。 Ollama官网地址&#xff1…

CAP与BASE:分布式系统设计的灵魂与妥协

CAP 理论 CAP理论起源于 2000 年&#xff0c;由加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会&#xff08;PODC&#xff09;上提出&#xff0c;因此 CAP 定理又被称作 布鲁尔定理&#xff08;Brewer’s theorem&#xff09; 2 年后&#xff0c;麻省理工学院的 …

电动汽车电池监测平台系统设计(论文+源码+图纸)

1总体设计 本次基于单片机的电池监测平台系统设计&#xff0c;其整个系统架构如图2.1所示&#xff0c;其采用STC89C52单片机作为控制器&#xff0c;结合ACS712电流传感器、TLC1543模数转换器、LCD液晶、DS18B20温度传感器构成整个系统&#xff0c;在功能上可以实现电压、电流、…

docker下部署kong+consul+konga 报错问题处理

前言&#xff1a; 由于在docker下部署一些项目比较特殊&#xff0c;特别是网络这一块&#xff0c;如果没有搞清楚&#xff0c;是很容易出问题的。 先上docker-compose 编排 这里的docker-compose for kong可以在 kong-compose 获取代码 version: 3.9x-kong-config:&kong…

装饰器模式

参考 装饰者模式 【设计模式实战】装饰器模式 1. HistorySet的例子 HistorySet 可以在实现的Set的基础上&#xff0c;在remove时保留删除的元素。通过将方法委托给现有的Set&#xff0c;在remove时先保留被删除元素后委托给注入的set进行remove public class HistorySet<…

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

【Golang】GC探秘/写屏障是什么?

之前写了 一篇【Golang】内存管理 &#xff0c;有了很多的阅读量&#xff0c;那么我就接着分享一下Golang的GC相关的学习。 由于Golang的GC机制一直在持续迭代&#xff0c;本文叙述的主要是Go1.9版本及以后的GC机制&#xff0c;该版本中Golang引入了 混合写屏障大幅度地优化了S…

docker 运行 芋道微服务

jar包打包命令 mvn clean install package -Dmaven.test.skiptrue创建文件夹 docker-ai 文件夹下放入需要jar包的文件夹及 docker-compose.yml 文件 docker-compose.yml 内容&#xff1a;我这里的是ai服务&#xff0c;所以将原先的文件内容做了变更&#xff0c;你们需要用到什…

【苍穹外卖】学习

软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程&#xff0c; 以及软件开发过程中涉及到的岗位角色&#xff0c;角色的分工、职责&#xff0c; 并了解软件开发中涉及到的三种软件环境。那么这一小节&#xff0c;我们将从 软件开发流程、角色…

网工项目理论1.7 设备选型

本专栏持续更新&#xff0c;整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 一.交换机选型要点 制式:盒式交换机/框式交换机。功能:二层交换机/三层交换机。端口密度:每交换机可以提供的端口数量。端口速率:百兆/千兆/万兆。交换容量:交换矩阵…

前端面试技巧与实践

在当今快速发展的互联网行业中&#xff0c;前端开发已经成为了一个至关重要的角色。随着技术的不断进步和用户需求的日益复杂&#xff0c;前端工程师的职责不再仅仅是实现页面的布局和交互&#xff0c;而是需要具备全方位的技术能力和工程思维。根据2023年Stack Overflow的开发…

项目2 数据可视化--- 第十五章 生成数据

数据分析是使用代码来探索数据内的规律和关联。 数据可视化是通过可视化表示来 探索和呈现数据集内的规律。 好的数据可视化&#xff0c;可以发现数据集中未知的规律和意义。 一个流行的工具是Matplotlib&#xff0c;他是一个数据绘图库&#xff1b; 还有Plotly包&#xff…

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…

python学opencv|读取图像(六十八)使用cv2.Canny()函数实现图像边缘检测

【1】引言 前序学习进程中&#xff0c;在对图像进行边缘识别的基础上&#xff0c;先后进行了边缘轮廓绘制&#xff0c;矩形标注、圆形标注和凸包标注。相关文章包括且不限于&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用cv2.findContours()函数cv…

C语言基础16:二维数组、字符数组

二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组由行和列两部分组成。属于多维数组&#xff0c;二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一个一维数组&#xff0c;只不过它的元素…

小爱音箱连接电脑外放之后,浏览器网页视频暂停播放后,音箱整体没声音问题解决

背景 22年买的小爱音箱增强版play&#xff0c;小爱音箱连接电脑外放之后&#xff0c;浏览器网页视频暂停播放后&#xff0c;音箱整体没声音&#xff08;一边打着游戏&#xff0c;一边听歌&#xff0c;一边放视频&#xff0c;视频一暂停&#xff0c;什么声音都没了&#xff0c;…

【做一个微信小程序】校园地图页面实现

前言 上一个教程我们实现了小程序的一些的功能&#xff0c;有背景渐变色&#xff0c;发布功能有的呢&#xff0c;已支持图片上传功能&#xff0c;表情和投票功能开发中&#xff08;请期待&#xff09;。下面是一个更高级的微信小程序实现&#xff0c;包含以下功能&#xff1a;…