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

MySQL 中 LIKE 语句的 `%` 和 `_` 以及 BLOB 和 TEXT 的详细解析和案例示范

1. LIKE 语句中的 %_ 用法

1.1 % 通配符的用法

% 通配符代表零个或多个字符。它是 MySQL 中用于模糊匹配的强大工具之一,可以在任何字符的位置使用。

示例 1:查找以特定字符开头的记录

假设我们有一个电商订单系统的 orders 表,其中包含客户订单信息。我们希望查找所有以 A 开头的客户姓名。

SELECT * FROM orders WHERE customer_name LIKE 'A%';

在这里,A% 将会匹配所有以 A 开头的名字,无论后面跟随多少字符。例如,Alice, Adam, Amanda 等都会被匹配到。

示例 2:查找以特定字符结尾的记录

假设我们想查找以 .com 结尾的所有邮箱地址。

sql复制代码SELECT * FROM orders WHERE email LIKE '%.com';

此查询将返回所有邮箱以 .com 结尾的记录,比如 example@gmail.comuser@domain.com

示例 3:查找包含特定子串的记录

我们可以通过 % 在字符串两端使用,查找包含某个子串的记录。

SELECT * FROM orders WHERE product_name LIKE '%Phone%';

此查询将返回所有包含 Phone 的产品名称,如 iPhone, Samsung Phone, Pixel Phone

1.2 _ 通配符的用法

_ 通配符代表单个字符,类似于正则表达式中的 .。在需要匹配特定位置的单个字符时非常有用。

示例 1:匹配固定长度的字符串

假设我们想查找那些长度为 4 个字符,且以 T 开头的产品名称。

SELECT * FROM products WHERE product_code LIKE 'T___';

在这里,T___ 将会匹配 T 开头,后跟三个字符的任何字符串,比如 TV01, T123, T999 等。

示例 2:查找特定位置的字符

假设我们有一组邮政编码,我们想查找所有第二位是数字 5 的邮政编码。

SELECT * FROM addresses WHERE postal_code LIKE '_5%';

此查询将返回所有第二个字符为 5 的邮政编码,比如 15000, 25100, 35123 等。


2. BLOB 和 TEXT 的区别

BLOB 和 TEXT 是 MySQL 中用于存储大量数据的两种数据类型。尽管它们看起来非常相似,但它们有几个关键的区别,特别是在存储、性能和应用场景方面。

2.1 BLOB 数据类型

BLOB(Binary Large Object) 是用于存储二进制数据的大型对象,如图片、视频、音频文件等。BLOB 类型专门设计用于处理不可读的数据,这些数据通常是通过应用程序处理的。

BLOB 的种类

MySQL 提供了 4 种不同大小的 BLOB 类型:

  • TINYBLOB:最大 255 字节
  • BLOB:最大 65,535 字节(64 KB)
  • MEDIUMBLOB:最大 16,777,215 字节(16 MB)
  • LONGBLOB:最大 4,294,967,295 字节(4 GB)
示例 1:存储图片文件

假设我们有一个 products 表,其中有一列 image_data 用于存储产品的图片文件。

CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(255),image_data BLOB
);

我们可以通过以下语句将图片文件插入到 image_data 中:

INSERT INTO products (product_id, product_name, image_data)
VALUES (1, 'Product A', LOAD_FILE('/path/to/image.jpg'));
BLOB 的常见应用场景
  • 存储图片、音频、视频文件:由于 BLOB 是二进制数据,因此非常适合存储大容量的多媒体文件。
  • 加密数据:加密后的数据也是二进制形式,适合使用 BLOB 存储。

2.2 TEXT 数据类型

TEXT 类型用于存储大文本数据,如评论、文章或日志信息。与 BLOB 不同,TEXT 是用于存储字符串数据,并且能够进行排序和比较。

TEXT 的种类

MySQL 也提供了 4 种不同大小的 TEXT 类型:

  • TINYTEXT:最大 255 字符
  • TEXT:最大 65,535 字符(64 KB)
  • MEDIUMTEXT:最大 16,777,215 字符(16 MB)
  • LONGTEXT:最大 4,294,967,295 字符(4 GB)
示例 2:存储产品描述

假设我们有一个 products 表,其中有一列 description 用于存储产品的长描述信息。

CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(255),description TEXT
);

我们可以通过以下语句插入一条长文本描述:

INSERT INTO products (product_id, product_name, description)
VALUES (1, 'Product A', 'This is a detailed description of Product A.');
TEXT 的常见应用场景
  • 存储文章、评论、产品描述:任何需要大量文本存储的场景都可以使用 TEXT 类型。
  • 存储 HTML 或 XML 数据:TEXT 也可以用来存储结构化文本数据,比如 HTML 或 XML。

2.3 BLOB 和 TEXT 的主要区别

特性BLOBTEXT
数据类型存储二进制数据(如图像、视频等)存储字符数据(如文本、文章、描述等)
排序和比较无法直接排序或比较可以排序和比较
索引处理BLOB 列不支持前缀索引TEXT 列支持前缀索引
存储用途适合存储不可读的二进制数据适合存储可读的文本数据
常见使用场景多媒体文件、加密数据长文本、文章、日志信息

3. LIKE 语句结合 BLOB 和 TEXT 的使用场景

在实际应用中,BLOB 和 TEXT 通常不会与 LIKE 语句一起使用,因为 BLOB 存储的是二进制数据,不适合字符串匹配查询。然而,TEXT 类型是存储字符串的,因此可以结合 LIKE 进行模糊查询。

示例:查找包含特定关键字的文章

假设我们有一个 articles 表,其中包含大量文章内容。我们想查找所有包含关键词 “MySQL” 的文章。

SELECT * FROM articles WHERE content LIKE '%MySQL%';

由于 content 列是 TEXT 类型的,因此可以用 LIKE 进行模糊查询,匹配包含 MySQL 的文章。


4. BLOB 和 TEXT 的性能问题

在实际应用中,BLOB 和 TEXT 的使用需要考虑性能问题。以下是一些关于性能优化的建议:

4.1 索引的影响

虽然 TEXT 列可以创建前缀索引,但由于 TEXT 和 BLOB 数据的大小,索引可能会增加数据库的存储开销,并且影响查询性能。因此,通常我们只会在较短的前缀上创建索引。例如,我们可以在 TEXT 列的前 255 个字符上创建索引。

CREATE INDEX idx_content ON articles(content(255));

这样可以加速 LIKE 语句的查询,但前提是我们只匹配前缀内容。

4.2 存储与查询的分离

在某些情况下,存储 BLOB 或大文本数据的列会影响查询性能。为了优化性能,许多应用会将 BLOB 或 TEXT 列与其他列分离,甚至将 BLOB 数据存储在文件系统中,而不是数据库中。

4.3 定期清理和归档

随着时间的推移,存储大量 BLOB 和 TEXT 数据会占用大量存储空间。为了保持性能,建议定期清理或归档不再使用的数据。


5. 总结

通过这篇文章,我们详细讨论了 MySQL 中 LIKE 语句的 %_ 通配符的使用方法,展示了它们在各种查询场景中的应用。同时,我们深入探讨了 BLOB 和 TEXT 数据类型的区别、应用场景及性能问题。在处理大文本数据时,TEXT 类型结合 LIKE 语句的模糊查询功能,能够非常高效地处理复杂的文本匹配问题。

相关文章:

MySQL 中 LIKE 语句的 `%` 和 `_` 以及 BLOB 和 TEXT 的详细解析和案例示范

1. LIKE 语句中的 % 和 _ 用法 1.1 % 通配符的用法 % 通配符代表零个或多个字符。它是 MySQL 中用于模糊匹配的强大工具之一,可以在任何字符的位置使用。 示例 1:查找以特定字符开头的记录 假设我们有一个电商订单系统的 orders 表,其中包…...

git clone卡在Receiving objects

git clone卡在Receiving objects 一直卡主 $ git clone gitxxx.git Cloning into xxx... remote: Enumerating objects: 75926, done. remote: Counting objects: 100% (18844/18844), done. remote: Compressing objects: 100% (6566/6566), done. Receiving objects: 60% (…...

vue+ant 弹窗可以拖动

通过自定义指令实现拖拽功能 在main.js里加入drag自定义指令 我自己测试时发现modal不管如何设置宽度,居中等,他的初始的left都为0,如果不设置好,容易出现点击后刚开始移动弹窗会偏移一段距离。 Vue.directive(drag, {bind(el)…...

(42)MATLAB中使用fftshift绘制以零为中心的功率谱

文章目录 前言一、MATLAB代码二、仿真结果画图 前言 在分析信号的频率分量时,将零频分量平移到频谱中心会很有帮助。本例给出绘制以零为中心的功率谱的方法。 一、MATLAB代码 代码如下: f 1; % 余弦波的振荡频率&#xf…...

Windows本地部署中文羊驼模型(Chinese-Alpaca-Pro-7B)(通俗易懂版)

最近由于项目原因需要部署大语言模型, 但碍于经济实力, 只能部署在笔记本电脑上部署量化模型, (电脑至少有16G运行内存),搜集了网上的相关部署资料仍然踩了不少坑,原因在于开源项目在不断更新,导致我们看了别人的教程仍…...

Web3的挑战与机遇:技术发展的现状分析

在Web3的世界中,去中心化和用户主权的理念正逐渐走向主流,推动了现有商业模式和技术生态系统的深刻变革。区块链技术及其核心应用之一——智能合约,正在促使这一转变的发生。智能合约的主要功能是通过自动化和预设协议执行,以减少…...

LangGraph - Hierarchical Agent Teams

本文翻译整理自 Hierarchical Agent Teams https://langchain-ai.github.io/langgraph/tutorials/multi_agent/hierarchical_agent_teams/ 文章目录 一、前言二、设置三、创建工具四、Helper Utilities五、定义代理 Team研究 Team文档写作Team 六、添加图层 一、前言 在前面的…...

2021-04-14 proteus中仿真时74HC245三态双向端口扩展输出

缘由proteus中仿真时74HC245输出时电平显示灰色(不确定电平状态)是为什么?-编程语言-CSDN问答 缘由C语言翻译单片机开关检测器-编程语言-CSDN问答 参考74ls245的工作原理及作用详解 - 电子发烧友网 参考74ls245_百度百科...

解决UNSPSC商品分类的层级不足的方法

《联合国标准产品和服务守则》(UNSPSC)是一个分层框架,旨在对产品和服务进行分类。其主要目标是通过提供统一的方法来对产品和服务进行分类,从而简化采购和供应链管理。 虽然 UNSPSC 有效地将产品分为各种商品类别,但…...

Pytest基于fixture的参数化及解决乱码问题

我们知道,Pytest是Python技术栈下进行自动化测试的主流测试框架。支持灵活的测试发现、执行策略,强大的Fixture夹具和丰富的插件支持。 除了通过pytest的parametrize标签进行参数化外,我们通过fixture的param参数也可以比较方便地实现参数化…...

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念,解决办法请直接从第二段开始看。layui多级表头的导出,弄了两天才搞定,中途一度想放弃,还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出,但是多级表头没有正常导出,单元格…...

Mysql 5.7 安装与卸载(非常详细)

一、环境介绍 操作系统:CentOS 7 MySQL:5.7 二、MySQL卸载 # 查看软件 rpm -qa|grep mysql # 卸载MySQL yum remove -y mysql mysql-libs mysql-common rm -rf /var/lib/mysql rm /etc/my.cnf 继续查看是否还有 MySQL 软件,有的话继续删…...

030 elasticsearch查询、聚合

文章目录 查询聚合查询RestHighLevelClientElasticsearchRestTemplat SpringData对ES客户端的封装:ElasticsearchRestTemplate SpringData对CRUD的封装:ElasticsearchRepository 原生ES客户端:RestHighLevelClient 查询 package com.xd.cube…...

前端工程启动工具

一些思考 在公司项目中,需要启一个新的前端工程(一个基于Webpack的React工程)。因为同一个项目中有其他的前端工程,我们最开始想的是参考另外一个工程的配置重启一个新的工程,但是又因为原来的工程用的库版本都比较老…...

游戏逆向基础-跳出游戏线程发包

附加游戏后下断点 bp ws2_32.send send函数断下后,可以看到数据地址每次都一样 可以说明这个游戏是线程发包,所以直接在数据窗口中转到这个地址,然后对这个地址下硬件写入断点。 下了硬件写入断点后可以一层一层往上面跟,确定写…...

做海外网站需要准备什么

一,购买域名 在租用国外服务器之前,您需要购买域名。域名是访问网站的标志,也是网站品牌的一部分。因此,在购买域名时,需要考虑域名的可记忆性、简短性和搜索性,使网站更容易被用户记住。 二,租…...

通过OpenCV实现 Lucas-Kanade 算法

目录 简介 Lucas-Kanade 光流算法 实现步骤 1. 导入所需库 2. 视频捕捉与初始化 3. 设置特征点参数 4. 创建掩模 5. 光流估计循环 6. 释放资源 结论 简介 在计算机视觉领域,光流估计是一种追踪物体运动的技术。它通过比较连续帧之间的像素强度变化来估计图…...

7、Vue2(二) vueRouter3+axios+Vuex3

14.vue-router 3.x 路由安装的时候不是必须的,可以等到使用的时候再装,如果之前没有安装的话,可以再单独安装。之前的终端命令行不要关闭,再重新开一个,还需要再package.json文件的依赖中添加。 如果忘记之前是否有安…...

最新PHP礼品卡回收商城 点卡回收系统源码_附教程

最新PHP礼品卡回收商城 点卡回收系统源码_附教程 各大电商平台优惠券秒杀拼团限时折扣回收商城带余额宝 1、余额宝理财 2、回收、提现、充值、新订单语音消息提醒功能 3、带在线客服 4、优惠券回收功能 源码下载:https://download.csdn.net/download/m0_66047…...

MySQL数据库和表的基本操作

文章目录 一、数据库的基础知识 背景知识数据库的基本操作二、数据类型 字符串类型数值类型日期类型三、表的基本操作 创建表查看表结构查看所有表删除表 一、数据库的基础知识 背景知识 MySQL是一个客户端服务器结构的程序 主动发送数据的这一方,客户端(client…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...