详解Mysql查询条件中字符串尾部有空格也能匹配上的问题

一、表结构

table person

id name
1
2 你(一个空格)
3 你(二个空格)

二、查询与结果

select * from person where `name` = ? 

无论 ? = ”你 + 几个空格”,都会检索出全部三个结果。

三、原因

mysql 校对规则属于padspace,会忽略尾部空格

针对的是 varchar char text …… 等文本类的数据类型

此为 sql 标准化行为。无需要设置也无法改变。

四、想要精确查询怎么办?

方法一:like

select * from person where `name` like ?

方法二:binary

select * from person where `name` = binary ?

binary 不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解成精确匹配

以上就是本次介绍的全部相关知识点,如果大家有任何补充可以联系小编。

相关推荐:

怎么优化Python中的字符串拼接操作以避免频繁的内存分配?

+拼接在循环中特别慢,因字符串不可变,每次s=s+item都新建对象并复制全部内容,时间复杂度达O(n²),引发大量内存分配与垃圾回收;推荐用list.append()+''.join()降至O(n)。 为什么+拼接字符串在循环里特别慢? Python中的字符串是不可变对象,每次用+拼接都会创建新字...

如何在不使用正则表达式的情况下按关键词“shiftdate”分割字符串

本文介绍一种纯Python内置方法,无需导入re模块,即可将长字符串按指定关键词(如"shiftdate")切分为多个子串,并确保每个子串以该关键词开头。核心思路是利用str.split()配合字符串拼接,精准保留分隔符。 本文介绍一种纯python内置方法,无需导入`re`模块,即可将长字符串按指...

如何将十六进制字符串安全转换为对应字符(ASCII)

本文详解如何将形如"48656c6c6f"的十六进制字符串正确解析为ASCII字符串,避免int()与chr()组合使用时因类型错误导致的崩溃,并推荐简洁、健壮的标准库方案。 本文详解如何将形如"48656c6c6f"的十六进制字符串正确解析为ascii字符串,避免`int()`与`chr()`组合...