Как игнорировать пробелы при извлечении данных из таблицы mysql

Я работаю на 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 ответ

Согласование образцов

Поиск соответствия шаблонов 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

Заметьте, что я удалил œ потому что это не будет соответствовать, я не уверен, какой символ он переводит. Другим вариантом было бы хранить имя "без акцента" в разных столбцах и соответствовать им. Поиск iconv в руководстве по PHP.

licensed under cc by-sa 3.0 with attribution.