从mysql表中检索数据时如何忽略空格

时间:2014-04-12 15:36:07

标签: php mysql sql

我在PHP中使用PDO。我遇到的问题是:    我有一张叫做产品的桌子。它有一个名为product_name的列。以下是产品名称的一些示例

product_name
----------
Bfilet de bœuf entier                    
Bar de ligne                             
Saumon entier
Beurre 

所以当我执行查询时

select * from products where product_name='beurre'

工作正常。它返回相应的行。

但如果我这样做:

select _ from products where product_name='Saumon entier'"

它不会返回任何结果。当涉及空间时似乎有问题!

另一个不寻常的事情是,我似乎没有在SQL命令行上遇到此问题,只有当我使用PHP来检索数据时。

有人可以向我解释为什么并提供解决方案吗?

1 个答案:

答案 0 :(得分:1)

模式匹配

查找MySQL pattern matching。代码类似于:

$stmt = $pdo->prepare('SELECT * FROM products WHERE product_name LIKE ?');
$stmt->execute(['Saumon entier%']);

var_dump($stmt->fetchAll());

编辑后,您似乎不想要LIKE,但实际上您在字符串末尾有一个空格。快速修复将是:

SELECT * FROM products WHERE TRIM(product_name) = 'Saumon entier'

但实际上你应该在输入上修剪空格。

回答评论中的问题

  

如果我有法国产品名称,例如'Côtedebœuf',有没有办法可以替换口音?

在大多数情况下,是的。如果您的数据库是utf8,例如utf8_unicode_ci,而ci表示不区分大小写,则匹配:

SELECT 'Côte de boeuf' = 'cote de boeuf';

'Côte de boeuf' = 'cote de boeuf'
----------------------------------
                                 1

请注意,我删除了œ,因为它不匹配,我不确定它翻译的是哪个字符。 其他选项是将“非重音”产品名称存储在不同的列中并与之匹配。在PHP手册中查找iconv