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

时间:2013-04-11 12:06:50

标签: php mysql

我有一个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个空格,并再次输入了空格。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

是更新的问题,如果您希望删除更多空间,其中内容可能是3或4个空格,查询将使用全部

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

让我知道它是否适合您?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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

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

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


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