Что лучший способ состоит в том, чтобы выполнить запрос так, чтобы пробелы в полях были проигнорированы? Например, следующие запросы:
SELECT * FROM mytable WHERE username = "JohnBobJones"
SELECT * FROM mytable WHERE username = "John Bob Jones"
нашел бы следующие записи:
John Bob Jones
JohnBob Jones
JohnBobJones
Я использую php или Python, но я думаю, что это не имеет значения.
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
Один из способов - использовать LIKE и Подстановочные знаки для построения вашего запроса. Примерно так:
SELECT * FROM mytable WHERE username LIKE 'John Bob Jones';
Это зависит от ситуации. Если вас не волнует хорошая производительность, вы можете сделать много вещей, но большинство из них будет медленным. Возможно, для вас это нормально, но я оставлю этот ответ здесь на случай, если другие читатели захотят найти быстрое решение.
Если вам нужна очень высокая производительность, вы должны индексировать строку без пробелов в базе данных. В PostgreSQL вы можете создать индекс для функции . Вы можете использовать это для создания индекса столбца, в котором пробелы заменены пустой строкой. Преимущество этого метода в том, что он не требует обслуживания, кроме создания индекса.
В MySQL вы не можете этого сделать, поэтому самым простым способом было бы продублировать данные в базе данных - один раз с пробелами и один раз без них. Используйте столбец без пробелов в предложении WHERE, но исходный столбец в списке столбцов SELECT. Это требует большего обслуживания, поскольку столбцы должны быть синхронизированы. Вы можете сделать это с помощью логики приложения или триггеров базы данных.