繁体   English   中英

MySQL搜索包含空格的值返回空结果(无行)

[英]MySQL search for value containing spaces returns empty result (no rows)

我有一个MySQL 数据库 ,其中包含一个包含部件号的列。 部分编号包含空格

3864205010  J

当我查询数据库或在phpMyAdmin 搜索该部分时,不会返回任何结果。

然而,当我delete 2个空格然后再次键入它们时,搜索会返回结果。

此查询不返回结果:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010  K'

此查询返回结果:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010  K'

它们看起来相同但在第二个查询中我删除了“K”之前的2个空格并再次输入空格。

如果您可以使用通配符而不是空格:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010%K'

是更新的问题,如果你想删除更多的空间,其中的内容可能是3或4以下的空格,查询将使用full

SELECT REPLACE( REPLACE( part_no, " ", " " ), " ", " " ) from parts.

让我知道它是否适合您?

SELECT * 
FROM  `parts` 
WHERE  REPLACE(REPLACE(`part_no`, CHAR(9), ''),' ','') LIKE  REPLACE(REPLACE('3864205010  K', CHAR(9), ''),' ','')

如果part_no和/或搜索字符串包含制表符和/或空格,则这可能有效。

这可能不是空格而是HTAB(ascii代码9)或甚至换行/回车(10和13)。 在一个好的文本编辑器中复制粘贴,你会看到它到底是什么。

现在,关于你为什么它不工作的奇迹,即使它看起来像一个空格,这是因为我们看到的每一个字符都由引擎解释(记事本,phpmyadmin,firefox ......任何带文本渲染的软件)

实际发生的是,当引擎找到ascii代码时,它会将其转换为可见字符。 例如,CHAR(9)经常被转换成通常等于2或4个空格的“大空间”。 但phpmyadmin可能只是决定不这样做。

其他示例是换行(CHAR(10))。 在文本编辑器中,它将是该行结束的信号,并且(在大多数unix系统下)必须启动新行。 但是您可以将此换行符复制到数据库字段中,您只是不确定它将如何呈现。 因为他们希望你看到单元格中的所有内容,他们可能会选择将其渲染为空格......但是如果你看一下它的ascii代码那就不是空格了(这里没有技巧,所有渲染引擎都会告诉你对ascii代码)。

始终使用ascii代码处理字符非常重要。


上面的答案建议使用通配符而不是空格。 这可能匹配,或者可能不匹配。 假设你的字符串是'386420K5010',所以它不是你想要的那个,仍然是LIKE'3864205010%K'模式会返回它。 最好的可能是使用正则表达式或至少识别这些字符串的固定模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM