详解MySQL常用的数据类型

news/2024/5/20 1:34:14

图片

前言

MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型,包括数值类型、字符串类型、日期和时间类型以及空间数据类型等,并探讨它们的优缺点、使用场景以及注意事项。

数据类型划分

MySQL的数据类型大致可以分为以下几类:

  • 数值类型:包括整数和浮点数类型,适用于存储各种数值数据。

  • 字符串类型:包括定长和可变长度的字符串,以及文本型数据。

  • 日期和时间类型:用于表示日期和时间信息。

  • 空间数据类型:用于地理空间数据的存储。

  • 二进制类型:适用于存储二进制数据,如图像或文件。

  • 特殊类型:例如JSON,用于存储特定格式的数据。

一、数值类型

数值类型包括精确数值类型(如INTEGER、DECIMAL)和近似数值类型(如FLOAT、DOUBLE)。

1. 精确数值类型

INTEGER:用于存储整数。

DECIMAL/NUMERIC:用于存储精确的小数。

示例:

CREATE TABLE example1 (      id INT,      price DECIMAL(10, 2)  );

注意点:DECIMAL类型需要指定精度和小数位数,以确保数据的准确性。

优缺点:精确度高,适用于需要精确计算的场景;但相对于近似数值类型,存储空间可能稍大。

使用场景:金融、会计等需要精确计算的领域。

2. 近似数值类型

FLOAT:单精度浮点数。

DOUBLE:双精度浮点数。

示例:

 CREATE TABLE example2 (       value FLOAT   );

注意点:由于浮点数在计算机中的表示方式,可能会存在精度问题。

优缺点:存储空间小,计算速度快;但精度不如精确数值类型。

使用场景:科学计算、物理模拟等对精度要求不是特别高的场景。

二、字符串类型

字符串类型包括CHAR、VARCHAR、TEXT等。

1. CHAR与VARCHAR

CHAR:定长字符串,长度固定。

VARCHAR:可变长字符串,长度可变。

示例:​​​​​​​

 CREATE TABLE example3 (       name CHAR(50),       description VARCHAR(255)   );

注意点:CHAR类型会占用固定长度的存储空间,即使实际数据长度小于指定长度;VARCHAR类型则根据实际数据长度来分配存储空间。

优缺点:CHAR类型查询速度快,但可能浪费存储空间;VARCHAR类型存储空间利用率高,但查询速度可能稍慢。

使用场景:CHAR适用于长度固定的数据,如身份证号;VARCHAR适用于长度可变的数据,如姓名、地址等。

2. TEXT类型

TEXT:用于存储长文本数据。

示例:​​​​​​​

 CREATE TABLE example4 (       content TEXT   );

注意点:TEXT类型适用于存储大量文本数据,但查询和处理速度可能不如CHAR和VARCHAR。

使用场景:文章、评论等需要存储大量文本的场景。

三、日期和时间类型

日期和时间类型包括DATE、TIME、DATETIME等。

示例:​​​​​​​

 CREATE TABLE example5 (  birthdate DATE,  event_time TIME,  registration_time DATETIME  );

注意点:不同的日期和时间类型有不同的存储范围和精度。

使用场景:记录用户生日、事件发生的具体时间等。

四、空间数据类型

GEOMETRY是MySQL中用于存储地理空间数据的数据类型。它是一个通用的地理空间数据类型,可以表示点、线、多边形等地理空间对象。GEOMETRY类型允许您在数据库中存储和查询地理空间数据,这对于地理信息系统(GIS)应用、地图应用以及需要空间查询和分析的应用非常有用。

示例:​​​​​​​

 CREATE TABLE example6 (  geom GEOMETRY  );

注意点:空间数据类型需要特定的GIS函数和工具来处理和查询。

使用场景:地理信息系统、地图应用等。

GEOMETRY相关函数使用

MySQL提供了一系列用于处理GEOMETRY类型数据的函数。以下是一些常用的函数及其用途:

1. ST_GeomFromText():用于从WKT(Well-Known Text)表示法创建GEOMETRY对象。

示例:

 SELECT ST_GeomFromText('POINT(1 1)');

2. ST_AsText():将GEOMETRY对象转换为WKT表示法。

示例:

 SELECT ST_AsText(ST_GeomFromText('POINT(1 1)'));

3. ST_Distance_Sphere():计算两个点之间的球面距离(以米为单位)。

示例:

SELECT ST_Distance_Sphere(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('POINT(1 1)'));

4. ST_Contains():检查一个GEOMETRY对象是否包含另一个GEOMETRY对象。

示例:

 SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'), ST_GeomFromText('POINT(0.5 0.5)'));

5. ST_Intersection():返回两个GEOMETRY对象的交集。

示例:

SELECT ST_AsText(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 1 1)'), ST_GeomFromText('LINESTRING(0 1, 1 0)')));

6. ST_Buffer():返回与给定的GEOMETRY对象相距指定距离的缓冲区。

示例:

 SELECT ST_AsText(ST_Buffer(ST_GeomFromText('POINT(0 0)'), 1));

 这些函数只是MySQL提供的一部分空间函数,实际上还有更多的函数可用于处理和分析地理空间数据。可以通过查阅MySQL的官方文档来了解更多关于这些函数的信息和用法。

请注意,为了使用这些空间函数,需要确保MySQL服务器已经启用了空间扩展,并且表已经使用了适当的空间索引来优化空间查询的性能。

五、二进制类型

适用于存储二进制数据,如图像或文件。但查询和操作不如文本类型方便。

示例:​​​​​​​

CREATE TABLE example (id INT(11) NOT NULL AUTO_INCREMENT,binary_col BINARY(10),varbinary_col VARBINARY(10),blob_col BLOB,PRIMARY KEY (id));

使用场景:适用于非文本数据的存储,如图片、文件等。

六、特殊类型

例如JSON,用于存储特定格式的数据。

示例:

CREATE TABLE example (id INT(11) NOT NULL AUTO_INCREMENT,json_col JSON,PRIMARY KEY (id));

​​​​使用场景:JSON类型适用于存储结构化复杂的数据。比如存储用户的配置文件、产品的详细信息、订单详情等。

JSON常用的函数:

1. JSON_EXTRACT(json_doc, path[, path] ...) 或 ->:从JSON文档中提取指定路径的值。

示例:​​​​​​​

 SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');  -- 或者  SELECT '{"name": "John", "age": 30}'->'$.name';

2. JSON_SET(json_doc, path, val[, path, val] ...):插入或更新JSON文档中的值。

示例:

 SELECT JSON_SET('{"name": "John"}', '$.age', 30);

3. JSON_REPLACE(json_doc, path, val[, path, val] ...):替换JSON文档中的值。

示例:

SELECT JSON_REPLACE('{"name": "John", "age": 30}', '$.age', 35);

4. JSON_REMOVE(json_doc, path[, path] ...):从JSON文档中删除指定路径的值。

示例:

 SELECT JSON_REMOVE('{"name": "John", "age": 30}', '$.age');

5. JSON_KEYS(json_doc[, path]):返回JSON文档中指定路径的所有键。

示例:

 SELECT JSON_KEYS('{"name": "John", "age": 30}');

6. JSON_ARRAY([val[, val] ...]):创建一个JSON数组。

示例:

 SELECT JSON_ARRAY(1, 'a', true);

7. JSON_OBJECT([key, val[, key, val] ...]):创建一个JSON对象。

示例:

SELECT JSON_OBJECT('name', 'John', 'age', 30);

8. JSON_VALID(json_val):检查给定的字符串是否是有效的JSON文档。

示例:

 SELECT JSON_VALID('{"name": "John", "age": 30}');

9. JSON_CONTAINS(json_doc, val[, path]):检查JSON文档是否包含特定值。

示例:

 SELECT JSON_CONTAINS('{"name": "John", "age": 30}', '"John"');

10. JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...):检查JSON文档是否包含特定路径。

示例:

 SELECT JSON_CONTAINS_PATH('{"name": "John", "age": 30}', 'one', '$.name');

这些函数只是MySQL JSON功能的一部分,实际上还有更多函数可用于处理JSON数据。可以查阅MySQL官方文档以获取完整的函数列表和详细的使用说明。

结语

MySQL的数据类型丰富多样,每种类型都有其特定的应用场景和优缺点。在实际应用中,我们需要根据数据的性质、存储需求以及查询性能要求来选择合适的数据类型。通过合理使用数据类型,我们可以提高数据库的性能,确保数据的完整性和准确性,为应用提供稳定可靠的数据支持。

图片


http://www.mrgr.cn/p/56250174

相关文章

鸿蒙编译子系统详解(二)main.py

1.5.4源码解析 1.5.4.1 build/hb/main.py脚本 这个脚本是编译的主程序脚本,流程如下: 首先是初始化各种module类,然后运行对应模块。 hb分为build,set,env,clean,tool,help几个模块,模块源码位于build/hb/modules/目录下&#xff…

本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录 大模型工具Ollama下载安装运行Spring Ai 代码测试加依赖配置写代码 ollama的web&Desktop搭建部署Open WebUI有两种方式Docker DesktopDocker部署Open WebUIDocker部署Lobe Chat可以配置OpenAI的key也可以配置ollama 大模型的选择 本篇基于windows环境下配置 大模型…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验,这届考试可能偏向出题更灵活,能死记硬背或套公式的题减少,多做准备呀各位大三苦逼人,挂了补考还得回来补考凸^-^凸共勉 (另外,别作弊,今天人工智能考试逮住…

每天五分钟计算机视觉:通过交并比判断对象检测算法的性能

本文重点 在对象检测领域,交并比(Intersection over Union,简称IoU)是衡量算法性能的重要指标之一。它不仅直观地反映了预测框与真实框之间的重叠程度,还是判断算法是否“运行良好”的关键依据。 那个定位是好的? 对象检测任务中,我们希望不仅检测到对象,同时我们还希…

太阳能光伏在生活中的三大作用

随着现在太阳能光伏的逐步发展,太阳能光伏已经越来越走近人们的生活,小编带大家盘点一下光伏在生活中的应用 一、发电 光伏的最初应用就是用来发电,以替代传统的化石燃料发电方式。光伏发电可以从根本上解决当今社会面临的能源短缺问题&…

【数据结构】顺序表专题

前言 本篇文章我们来进行有关顺序表的专题训练,让我们一起来看一下有关顺序表的算法题 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 📝若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 1.移除…

洗地机什么牌子最好?618高性价比家用洗地机品牌

随着科技的发展,智能智能清洁家电越来越受到消费者的欢迎。洗地机作为其中的佼佼者,已经成为许多家庭清洁的好帮手。然而,面对满目琳琅的洗地机品牌型号,究竟哪一款机型适合家用呢,正好618也临近了,又有哪些…

30万买智驾车,选特斯拉还是华为?

文 | AUTO芯球 作者 | 雷歌 我真是佩服马斯克, 一趟24小时的北京出差,就解除了Model车系进入机关单位禁令的问题, 也打开了特斯拉FSD完全自动驾驶进入中国市场的大门, 给我我一天时间,估计一部剧都追不完&#xf…

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线,垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线,使得它们与…

C++ 数据输入cin (解决CLoin输入中文程序出错)

数据输入cin语法:cin >> 变量 解决 CLoin 使用cin输入中文程序无法正常运行按住Ctrl+alt+shift+/键 弹出对话框选择注册表取消勾选run.process.with.pty

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种:适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求:在软件维护阶段,已存在的方法与目标接口不匹配,需要个中…

rag-embeddings基础流程

什么是检索增强的生成模型 LLM 固有的局限性 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 检索增强生成 RAG(Retrieval Augmented Generation)顾名思义,通过检索的方法来增强生成模型的能力。 类比:你可以把这个…

Android4.4真机移植过程笔记(三)

如果文章字体看得不是很清楚,大家可以下载pdf文档查看,文档已上传~oo~ 7、安装加密APK 需要修改文件如下: 相对Android4.2改动还是蛮大的,有些文件连路径都变了: //Android4.2 1、frameworks/native/libs…

安卓开发(二)Android开发基础知识

了解Android Android大致可以分为4层架构:Linux内核层、系统运行库层、应用框架层和应用层。 内核层:Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动…

常用算法汇总

作者:指针不指南吗 专栏:算法篇 🐾算法思维逻辑🐾 文章目录 1.判断闰年2.计算从某天到某天的天数3.二分4. 前缀和5.差分6.图论6.1dfs6.2走迷宫 7.最短路7.1dijkstra7.2foly 8.并查集9.数论9.1gcd lcm9.2判断素数(质数)9.3分解质因…

指代消解类方法梳理

概念: MLM:带遮罩的语言模型 NSP:单句预测,任务包括两个输入序列 SBO:分词边界目标 1.spanBERT,2019 spanBERT是对bert从分词到文本跨度的优化,主要有两方面的优化:&#xff08…

开发组合php+mysql 人才招聘小程序源码搭建 招聘平台系统源码+详细图文搭建部署教程

随着互联网的快速发展,传统的招聘方式已经不能满足企业和求职者的需求。为了提高招聘效率,降低招聘成本,越来越多的人开始关注人才招聘小程序、在线招聘平台。分享一个人才招聘小程序源码及搭建,让招聘更加高效便捷。系统是运营级…

C++数据类型

整型C++除了int类型 还有其他类型的数据,所占空间也不一样 sizeof() 函数——得到数据所占的字节#include "iostream" using namespace std;int main() {system("chcp 65001");long long num = 20;cout << "long long 类型占" << s…

Stable Diffusion:AI绘画的新纪元

摘要&#xff1a; Stable Diffusion&#xff08;SD&#xff09;作为AI绘画领域的新星&#xff0c;以其开源免费、强大的生成能力和高度的自定义性&#xff0c;正在引领一场艺术与技术的革命。本文旨在为读者提供Stable Diffusion的全面介绍&#xff0c;包括其原理、核心组件、安…

SpringBootWeb入门

SpringBoot可以帮助我们快速的构建应用程序、简化开发、提高效率 创建SpringBoot工程&#xff0c;并勾选web开发相关依赖 定义HelloController类&#xff0c;添加方法&#xff0c;并添加注解 运行测试 创建SpringBoot工程(联网下载) 在File里面点击new Module 点击next 修…