MySQL字符串比较忽略尾随空格

news2024/11/12 12:50:12

问题

今天遇到一个线上问题,排查过程中发现,MySQL 查询条件使用字符串判断等时会自动忽略字符串尾部的空格,示例如下:

MySQL 表格结构:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

新增数据,注意 name 传的是 “AAA ”,尾部两个空格:

INSERT INTO `test1`.`users`(`id`, `name`, `age`) VALUES (1, 'AAA  ', 30);

当执行查询操作时,竟然查出了数据:

SELECT name, LENGTH(`name`) from users where name = 'AAA';

现象1

又试了当条件中空格在右时,可以匹配到数据:

现象2

当条件中空格在左时,又匹配不到数据:

现象3

原来,MySQL 在进行字符串比较时,默认情况下是对空格不敏感的,这与 MySQL 的 SQL 模式设置有关。

当使用=进行字符串比较时,如果字符串右侧包含空格,MySQL 会自动忽略这些空格。也就是说,在默认的 MySQL 配置下,'AAA''AAA ' 被认为是相等的。因此,在执行查询时:

SELECT name, LENGTH(`name`) FROM users WHERE name = 'AAA';

可以查到存储在数据库中 name = 'AAA ' 的数据。这是因为MySQL在比较时忽略了尾随空格。

为什么会这样?

MySQL 在进行字符串比较时遵循以下规则:

  1. 对于 CHAR 类型字段,存储时会自动删除尾随空格。
  2. 对于 VARCHAR 类型字段,在比较时会忽略尾随空格。

这种行为是因为 SQL 标准允许在字符串比较中忽略尾随空格。

如何避免这个问题?

如果你需要严格区分尾随空格,可以使用以下方法:

  1. 使用二进制比较:可以使用BINARY关键字进行严格比较。

    SELECT name, LENGTH(`name`) FROM users WHERE BINARY name = 'AAA';
    

    这样,MySQL会按照二进制字节逐个比较,尾随空格也不会被忽略。

    image-20240823182358502

  2. 使用LIKE进行精确匹配

    SELECT name, LENGTH(`name`) FROM users WHERE name LIKE 'AAA';
    

    LIKE运算符在处理尾随空格时也会更严格。

    image-20240823182430287

  3. 显式地处理空格:可以通过TRIM函数显式去掉空格后再进行比较:

    SELECT name, LENGTH(`name`) FROM users WHERE TRIM(name) = 'AAA';
    

image-20240823182507483

总结

MySQL默认在字符串比较中忽略尾随空格,如果需要进行严格匹配,可以使用BINARYLIKE或者显式处理空格的方法。

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

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

相关文章

深度学习一(Datawhale X 李宏毅苹果书 AI夏令营)

一,机器学习基础 机器学习(Machine Learning, ML)是让机器具备学习能力的过程,其核心在于使机器能够自动寻找并应用复杂的函数,以解决各种任务如语音识别、图像识别和策略决策(如AlphaGo)。这些…

YoloV8改进策略:卷积篇|ACConv2d模块在YoloV8中的创新应用与显著性能提升|简单易用|即插即用

摘要 在本文中,我们创新性地将ACConv2d模块引入到YoloV8目标检测模型中,通过对YoloV8中原有的Conv卷积层进行替换,实现了模型性能的大幅提升。ACConv2d模块基于不对称卷积块(ACB)的设计思想,利用1D非对称卷积(13和31卷积)来增强标准方形卷积核(如33卷积)的表征能力。…

spring揭秘11-aop05-aop应用经典场景及目标对象内部方法调用无法被拦截

文章目录 【README】【1】基于aop实现全局异常处理【2】基于aop实现权限检查【3】基于aop实现缓存【4】aop无法拦截目标对象内部方法调用的问题【4.1】问题概述【4.2】解决方法 【README】 本文总结自《spring揭秘》,作者王福强,非常棒的一本书&#xf…

TFTP error: ‘Permission denied‘ (0)

项目场景: 环境:ubuntu 5.4.150 开发板:s3c2440 在u-boot中,通过tftp传输uImage文件失败。 问题描述 SMDK2410 # tftp 0x30008000 uImage dm9000 i/o: 0x20000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 00:0…

【变化检测】基于UNet建筑物变化检测

主要内容如下: 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、基于likyoo变化检测代码模型训练与预测 4、Onnx运行及可视化 运行环境:Python3.8,torch1.12.0cu113 likyoo变化检测源码:https://github.com/likyoo/change_dete…

数据仓库中的表设计模式:全量表、增量表与拉链表

在现代数据仓库中,管理和分析海量数据需要高效且灵活的数据存储策略。全量表、增量表和拉链表是三种常见的数据存储模式,各自针对不同的数据管理需求提供了解决方案。全量表通过保存完整的数据快照确保数据的一致性,增量表则通过记录数据的变…

如何在 Ubuntu 系统中安装PyCharm集成开发环境?

在上一篇文章中,我们探讨了Jupyter notebook,今天再来看看另一款常用的Python 工具,Pycharm。 PyCharm也是我们日常开发和学习常用的Python 集成开发环境 (IDE),由 JetBrains 开发。 PyCharm 带有一整套可以帮助用户在使用Pytho…

大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

【代码随想录训练营第42期 Day39打卡 - 打家劫舍问题 - LeetCode 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

目录 一、做题心得 二、题目与题解 题目一:198.打家劫舍 题目链接 题解:动态规划 题目二:213.打家劫舍II 题目链接 题解:动态规划 题目三:337.打家劫舍III 题目链接 题解:动态规划 三、小结 一、…

卸载nomachine

网上的方法:提示找不到命令 我的方法: step1. 终端输入 sudo find / -name nxserver 2>/dev/null确认 NoMachine 的实际安装路径。你可以使用 find 命令在系统中查找 nxserver 脚本的位置。 找到路径后,你可以使用该路径来卸载 NoMachine。 如下图,紫色框中是我的路径…

【ACM出版】第三届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2024,9月06-08)

第三届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2024)定于2024年9月06-08日在中国-济南举行。 会议主要围绕公共管理、数字经济,互联网技术等研究领域展开讨论。会议旨在为从事公共管理、经济、大数据、互联网研究的专家学者提供一…

解决LabVIEW配置文件中文乱码问题

LabVIEW配置文件中的中文字符在程序调用时出现乱码,通常是由于字符编码不匹配引起的。LabVIEW默认使用ANSI编码格式,而配置文件可能使用了不同的编码格式(如UTF-8),导致中文字符在读取时无法正确解析。 解决方法 统一编…

导数的基本法则与常用导数公式的推导

目录 n 次幂函数导数公式的推导导数和的运算法则的证明正弦、余弦函数导数公式的推导代数证明两个重要极限(引理)及证明具体推导 几何直观 导数积的运算法则的证明导数商的法则的证明链式法则的证明有理幂函数求导法则的证明反函数求导法则的证明反正切函…

SSH 远程登录报错:kex_exchange_identification: Connection closed.....

一 问题起因 在公司,使用ssh登录远程服务器。有一天,mac终端提示:`kex_exchange_identification: Connection closed by remote host Connection closed by UNKNOWN port 65535`。 不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。…

C++初学(15)

前面学习了循环的工作原理,接下来来看看循环完成的一项最常见的任务:逐字符地读取来自文本或键盘的文本。 15.1、使用cin进行输入 如果需要程序使用循环来读取来自键盘的文本输入,则必须有办法直到何时停止读取。一种方式是选择某个特殊字符…

发布分班查询,老师都在用哪个小程序?

新学期伊始,校园里又迎来了一批朝气蓬勃的新生。老师们的日程表上,除了日常的教学准备,还多了一项重要的任务——分班。这项工作不仅需要老师们精心策划,以确保每个班级的平衡,还要在分班完成后,及时将结果…

系统架构不是设计出来的

今天给大家分享一个 X/ Twitter 早期系统架构演变的故事,内容来自《数据密集型应用系统设计》这本书,具体数据来自 X/ Twitter 在 2012 年 11 月发布的分享。 推特的两个主要业务是: 发布推文(Tweets)。用户可以向其粉…

零基础入门~汇编语言(第四版王爽)~第3章寄存器(内存访问)

文章目录 前言3.1 内存中字的存储3.2 DS 和[address]3.3 字的传送3.4 mov、add、sub指令3.5 数据段检测点3.13.6 栈3.7 CPU提供的栈机制3.8 栈顶超界的问题3.9 push、pop指令3.10 栈 段检测点3.2实验2 用机器指令和汇编指令编程 前言 第2章中,我们主要从CPU 如何执…

2月公开赛Web-ssrfme

考点&#xff1a; redis未授权访问 源码&#xff1a; <?php highlight_file(__file__); function curl($url){ $ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch); }if(isset($_GET[url…

回归预测 | Matlab实现WOA-ESN鲸鱼算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现WOA-ESN鲸鱼算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现WOA-ESN鲸鱼算法优化回声状态网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现WOA-ESN鲸鱼算法优化回声状态网络多输入单输出…