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


how to ignore spaces when retrieving data from mysql table

我使用的是带有PDO的PHP。我遇到的问题是:我有一张桌子叫产品。它有一个名为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检索数据时。

有人能向我解释原因并提供解决方案吗?

模式匹配

查找MySQL模式匹配。代码类似于:

$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ôte de bœuf",有没有办法取代口音?

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

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

注意,我删除了œ,因为它不匹配,我不确定它翻译成哪个字符。另一种选择是将"非重音符号"的产品名称存储在不同的列中,并与之匹配。在PHP手册中查找iconv