SELECT в MySQL и PostgreSQL

Добрый день, недавно надумал пользоваться PostgreSQL и заметил одну особенность, SELECT в Postres регистрочувствителен. Если раньше в MySQL я хотел получить запись testTest и запрашивал его как угодно, оно отдавалась, то теперь это не получается. Можно ли как-то строить запрос в Postgres, чтоб он был не регистрозависимым?
  • Вопрос задан
  • 5084 просмотра
Решения вопроса 1
DevMan
@DevMan
SELECT *
FROM table
WHERE lower(column) = 'testtest';
или использовать ILIKE.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@pwlnw
Судя по всему дело в кодировке. Точнее в collation.
В mysql вы использовали какой-то из вариантов case independent collation. например utf8_general_ci, который по умолчанию задается при выборе utf8.
Если вы будете использовать функцию lower, то, наверное, индекс не сработает.
Может вы ошиблись при настройке кодировки для базы?
Ответ написан
peter23
@peter23
Postgres по умолчанию сводит названия полей и таблиц к нижнему регистру. Например, если есть поле testTest в таблице my_table, то запрос SELECT testTest FROM my_table вернет ошибку, что поля testtest нет. Чтобы получить значение этого поля нужно заключать название в кавычки. Запрос SELECT "testTest" FROM my_table отработает нормально.
Ответ написан
elmo
@elmo Автор вопроса
Нет, нужно получить не поле а значение из поля.

SELECT * FROM table WHERE = 'testtest';

или

WHERE = 'TestTest';

выдавал мне запись testTest, которая именно так и записана.

Вариант, который предложил DevMan более менее подходит, но подавать на вход значение в нижнем регистре мне не всегда удобно.
Ответ написан
elmo
@elmo Автор вопроса
WHERE column ILIKE 'TestTest' подходит, Спасибо DevMan.
Ответ написан
Комментировать
elmo
@elmo Автор вопроса
Теперь логичные вопросы про скорость.

ILIKE — «They tend to be slow because there is no index support, so they must process all documents for every search.»

citex — «If you declare a column as UNIQUE or PRIMARY KEY, the implicitly generated index is case-sensitive. So it's useless for case-insensitive searches, and it won't enforce uniqueness case-insensitively.»

Что будет логичнее использовать при поиски одной записи являющейся UNIQUE и PRIMARY KEY из ~100тысяч.

Хотя наверно мой комментарий сам отвечает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы