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

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析(3)

“ 金融行业在自身数据治理和资产化建设方面一直走在前列。” 一直以来,金融行业由于其自身需要,都是国内开展信息化建设最早,信息化程度最高的行业。 在当今数据要素资产化的浪潮下,除了行业自身自身数据治理和资产化建设方面&am…

清华大模型ChatGLM3在本地Tesla P40上也运行起来了

正文共:999 字 14 图,预估阅读时间:1 分钟 我们之前部署了ChatGLM3(清华大模型ChatGLM3部署初体验),但是运行体验比较差,主要就是因为Tesla M4的显存只有4 GB,无法支撑项目运行。为此…

PyCharm怎么安装Comate与使用示范

目录 简单介绍Comate 安装步骤详解 Comate使用示范详解 使用总结 简单介绍Comate Baidu Comate智能编码助手是一款基于文心大模型打造的编码辅助工具,具备多重优势,包括代码智能、应用场景丰富、创造价值高、广泛应用等。它能帮助开发者提升编码效率…

数仓开发中期:理论巩固

一、数仓以及商业智能(Data Warehousing and Business Intelligence, DW/BI)系统 1.1数据操作和数据获取的区别 对所有组织来说,信息都是其最重要的财富之一。信息几乎总是用作两个目的:操作型记录的保存和分析型决策的制定。简单来说&…

关于vs2019 c++ STL 中容器的迭代器的 -> 运算符的使用,以 list 双向链表为例

(1)如下的结构体 A ,若有指针 p new A() ;则可以使用 p->m , p->n 解引用运算符。 struct A { int m ; int n; } 对于 STL 中提供的迭代器,提供了类似于指针的功能。对迭代器也可以使用 -> 运算…

ElasticSearch知识点汇总

1、ES中的​​​​​​​倒排索引是什么。 倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典映射表即为倒排索引 2、ES是如何实现master选举的。 选举过程主要包括以下几个步骤: 心跳检测: 每个节点…

docker安装elasticsearch:7.17.21

docker安装elasticsearch:7.17.21 下载对应版本的docker镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.21启动容器 docker run --name elasticsearch-test -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -t docker.elastic.…

学习通下载PDF资源

今天突然发现,学习通的pdf资源居然是没有下载入口的,这整的我想cv一下我的作业都搞不了,于是我一怒之下,怒了一下。 可以看到学习通的pdf资源是内嵌在网页的,阅读起来很不方便,虽然他内置了阅读器&#xf…

如何做好一个活动策划?

活动策划的关键要素是什么? 首先,要明确一个概念:做活动就是走钢丝,没有保险的高空走钢丝!因为,活动没有“彩排”,只有现场"直播”! 无论什么类型的活动,人数是50人还是2000人,也不论预算…

Linux网络编程(一) 网络基础

一、一些概念 1.1、局域网与广域网 局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 1.2、IP IP地址本质就是…

某制造公司屋顶分布式光伏发电案例分享--分布式光伏电力监控系统解决方案

安科瑞薛瑶瑶18701709087/17343930412 ★分布式光伏监控系统 分布式光伏监控电力系统遵循安全可靠、经济合理原则,满足电力系统自动化总体规划要求,且充分考虑光伏发电的因素,对分布式光伏发电、用电进行集中监控、统一调度、统一运维、满足…

苍穹外卖项目---------收获以及改进(5-6天)

①HttpClient 核心作用:在java编码中发送http请求 第一步:引入依赖 第二步:使用封装一个工具类 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.co…

向各位请教一个问题

这是菜鸟上的一道题目,单单拿出来问问大家,看看能不能解惑 ,谢谢各位! 题目25:求12!3!...20!的和 解题思路:这个题不知道为什么我用DEV C 5.11显示出来为0.000000,可能版本有问题?&a…

【JVM】内存结构

内存结构 Java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程一一对应的数据区域会随着线程开始和结束而创建和销毁。 线程私有…

Agent AI智能体:我们的生活即将如何改变?

你有没有想过,那个帮你设置闹钟、提醒你朋友的生日,甚至帮你订外卖的智能助手,其实就是Agent AI智能体?它们已经在我们生活中扮演了越来越重要的角色。现在,让我们一起想象一下,随着这些AI智能体变得越来越…

【Ansiable】ansible的模块和主机清单

Ansible Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比…

【无标题】程序设计和c语言-谭浩强配套(适合专升本)

一晃大半年没更新了,一直在备考,想着这几天把前段时间学的c语言给大家分享一下,在此做了一个专栏,有需要的小伙伴可私信获取。 说明:本专栏所有内容皆适合专升本复习资料,本人手上也有日常刷题整理的错题以…

电脑提示mfc140u.dll文件丢失了?怎么快速修复mfc140u.dll文件

当你的电脑提示你的mfc140u.dll文件丢失了,那么就要小心了,可能你的某些程序出问题了!这时候需要我们去进行相关的修复,只有修复了这个mfc140u.dll文件,才能正常的使用某些程序。下面一起来了解一下mfc140u.dll文件吧。…

修改ElTable组件的样式(element-plus)

效果展示 <div class"table_main"><ElTable:data"tableList":header-cell-style"{color: #ffffff,background: #6f7f93,}"class"table_border":highlight-current-row"false"><ElTableColumn type"inde…

sql注入练习

1.什么是SQL注入 SQL注入是比较常见的网络攻击方式之一&#xff0c;它不是利用操作系统的BUG来实现攻击&#xff0c;而是针对程序员编写时的疏忽&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;甚至篡改数据库 2.sql注入原理 攻击者注入一段包含注释符的SQL语…