详解MySQL常用的数据类型

图片

前言

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.mzph.cn/web/7596.shtml

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

相关文章

游泳耳机哪个牌子好性价比高?这四款热榜游泳耳机必须要看!

随着生活品质的提升和健康意识的增强,游泳已成为许多人日常锻炼的首选。在享受水中畅游的同时,音乐成为了许多游泳爱好者的最佳伴侣。游泳耳机,作为一种专为水下运动设计的音频设备,近年来逐渐受到市场的青睐。然而,面…

新华三VRRP配置

新华三VRRP配置 配置步骤 (1).基础配置: CORE1: [CORE1]vlan 10 //创建vlan10 [CORE1-vlan10]int vlan 10 //进入vlanif 10 [CORE1-Vlan-interface10]ip add 192.168.10.1 24 //配置ip [CORE1-Vlan-interface10]int g1/0/2 //进入接口 [C…

一文了解CRM系统帮助中心:从认识到搭建

客户关系管理(CRM)系统是企业的一个重要部分。而CRM系统帮助中心为用户提供了便捷的支持服务,提升了用户体验,减少了企业运营成本。本文将从认识到搭建,带你全面了解CRM系统帮助中心。 一、认识CRM系统帮助中心 CRM系统…

品鉴中的艺术表达:如何将红酒与绘画、雕塑等艺术形式相结合

品鉴雷盛红酒不仅是一种味觉的享受,更是一种艺术的体验。将雷盛红酒与绘画、雕塑等艺术形式相结合,能够创造出与众不同的审美体验,进一步丰富品鉴的内涵。 首先,绘画作为视觉艺术的一种表现形式,能够通过色彩和构图来传…

Python爬虫实战:爬取小红书去水印图片

1. 思路分析 首先,在小红书 APP 中点击分享,获取到它的链接分享,如:www.xiaohongshu.com/discovery/i… 然后把它在浏览器中(我用的是 chrome 浏览器)打开。 按 F12 或者 Ctrl shift i 打开 开发者工具…

SG-8018CE晶体振荡器可编程规格书

SG-8018CE系列晶体振荡器是一个高性能、多功能且具有高度集成性的解决方案,它满足了现代电子系统的严格要求。其广泛的频率范围0.67 MHz到170 MHz,且频率调节精度达到1ppm,1.62 V至3.63V的宽广电源电压,使能(OE&#x…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力,能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、W…

小程序预览或上传代码时,遇到app.json未找到某个wxml文件的解决方法

uniapp小程序,点击预览或者是上传代码,遇到app.json无法找到某个wxml文件的解决方法:清缓存 问题: message:Error: app.json: 未找到 ["subPackages"][3]["pages"][3] 对应的 subPackages4/pages/…

Rust 解决循环引用

导航 循环引用一、现象二、解决 循环引用 循环引用出现的一个场景就是你指向我,我指向你,导致程序崩溃 解决方式可以通过弱指针,而Rust中的弱指针就是Weak 在Rc中,可以实现,对一个变量,持有多个不可变引…

仓库管理员如何入门?仓库管理六大步骤教会你!

新手菜鸟入行,如何做好一个仓库管理员?仓库运营对于许多行业至关重要,例如制造、零售和物流。它们涉及高效、安全地接收、仓储、拣选、包装和运输货物。 跟着这6个步骤做,最慢一个月,最快一周,就能轻松做好…

高效项目管理:如何利用zz-plan在线甘特图工具

作为项目管理人员,使用 zz-plan https://zz-plan.com/这样的在线甘特图协作软件可以极大地提高项目管理的效率和效果。以下是结合zz-plan特点的一些关键步骤: 1. 制定项目计划 在zz-plan上创建新的项目,定义项目目标、关键里程碑和最终期限。…

ABB RobotStudio学习记录(一)新建工作站

RobotStudio新建工作站 最近遇到 虚拟示教器和 Rapid 代码不能控制 视图中机械臂的问题,其实是由于机械臂和工作站不匹配。以下是解决方法。 名称版本Robot Studio6.08 新建一个”空工作站“; 在目标位置新建一个目标文件夹 C:\solution\test&#xff0…

数据挖掘实战-基于深度学习RNN+CNN的能源价格预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

深入理解 LinkedList 及底层源码分析

LinkedList 是基于链表结构的一种 List,在分析 LinkedList 源码前我们先对对链表结构做一个简单的了解。 一、链表的概念 链表是由一系列非连续的节点组成的存储结构,简单分下类的话,链表又分为_单向链表和双向链表,而单向 / 双…

layui 数据表格 拖动 列、行 位置 重新排序 等

先贴官网 layui官网 ; 再贴一个要使用的 插件官网 : layui-soul-table 示例文档 ; 这个插件功能很多 看到那个下载 后悔没早点知道啊 还自己写了 一个下载 可以到官网看看 很多实用的 需要引入的 js layui.config({base: rootPath…

检测服务器环境,实现快速部署。适用于CRMEB_PRO/多店

运行效果如图: 最近被好多人问,本来运行的好好的,突然swoole就启动不了了。 本工具为爱发电,如果工具正好解决了您的需求。我会很开心 代码如下: """本脚本为爱发电by:网前雨刮器 """…

如何翻译外文文献【攻略】

如何翻译外文文献【攻略】 前言版权推荐如何翻译外文文献简单描述第一步 准备一篇外文文献第二步 翻译网站第三步 解锁文档第四步 编辑dpf第五步 pdf转为word第六步 编辑word第七步 word转为pdf 最后 前言 2024-5-7 14:50:14 以下内容源自《【攻略】》 仅供学习交流使用 版权…

【全网首发】Typecho文章采集器火车头插件去授权版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 目前市面上基本没有typecho火车头采集器 而分享的这一款采集器,牛的一批 内置使用方法与教程! 二、效果展示 1.部分代码 代码如下(示例&#…

串的模式匹配之KMP算法实现

概述 函数刻画 主串位置不变,next值就是模式串(子串)比较后应跳转的位置 不同位置 next[j]函数 next由模式串决定,看模式串当前比较位的前串中前后缀相同的个数来得k-1的值,next[当前位]k1 小补充 PM值:也称部分匹配值&#xf…

Redis Cluster on K8s 大揭密

之前我们针对 Redis 容器化,做了一些讨论: 《Redis 容器化,是不是个“软柿子”》,业界不乏相关的实践分享,KubeBlocks 也针对 Redis Cluster 做了适配并有对应的解决方案。在 Redis 容器化的过程中,KubeBlo…