Назад | Перейти на главную страницу

PostgreSQL ILIKE не возвращает никаких данных?

Я тестирую sql-код, предназначенный для поиска записей. У меня есть база данных A (моя домашняя копия) и база данных B (сервер для сайта, база данных является абсолютным клоном базы данных A). Для целей этого примера предположим, что у меня есть таблица с 3 столбцами -

  1. имя пользователя
  2. Имя
  3. Фамилия

Представьте, что у вас есть пара записей в таблице, которые содержат слова «тест», «тестирование», «тестировщик» во всех столбцах. Теперь вы хотите выбрать все записи, содержащие слово «тест» во всех столбцах. Соответствующий запрос sql будет:

SELECT * FROM users WHERE username ILIKE $$%test%$$ OR firstname ILIKE $$%test%$$ OR lastname ILIKE $$%test%$$;  

его код возвращает правильные данные в базе данных A, но ничего не возвращает в базе данных B. Копии идентичны - я выгрузил db A (мой локальный компьютер) и импортировал его в db B (сервер). Только у меня есть доступ к этому серверу, так что никто не мог что-то напутать. Кроме того, я попытался удалить базу данных B и воссоздать ее с тем же импортом, чтобы быть уверенным, и снова без результатов после запроса sql.

Единственная разница между db A и db B заключается в том, что db A работает на 32-битной машине, а db B работает на 64-битной машине. Версии разные -db A запускает 8.3.5, а db B запускает 9.0.2, конфигурация по умолчанию, которая приходит при установке PostgreSQL.

Может ли это быть связано с 32/64 битной ОС? Это из-за разных версий или это параметр, который мне нужно включить? Я на 99,999% уверен, что это правильный sql, который я выполняю, поэтому я исключил его.

ILIKE зависит от настроек локали, поэтому вам следует сравнить их на двух машинах. Взгляни на «22.1. Поддержка локали», и особенно в разделе «22.1.3. Проблемы».