Сведения о вопросе

Ayrat

20:59, 14th August, 2020

Теги

PostgreSQL    

SELECT в MySQL и PostgreSQL

Просмотров: 382   Ответов: 6

Добрый день, недавно надумал пользоваться PostgreSQL и заметил одну особенность, SELECT в Postres регистрочувствителен. Если раньше в MySQL я хотел получить запись testTest и запрашивал его как угодно, оно отдавалась, то теперь это не получается. Можно ли как-то строить запрос в Postgres, чтоб он был не регистрозависимым?



  Сведения об ответе

lats

10:23, 10th August, 2020

SELECT *
FROM table
WHERE lower(column) = 'testtest';
или использовать ILIKE.


  Сведения об ответе

DO__IT

17:25, 18th August, 2020

Судя по всему дело в кодировке. Точнее в collation.
В mysql вы использовали какой-то из вариантов case independent collation. например utf8_general_ci, который по умолчанию задается при выборе utf8.
Если вы будете использовать функцию lower, то, наверное, индекс не сработает.
Может вы ошиблись при настройке кодировки для базы?


  Сведения об ответе

qwerty101

03:22, 18th August, 2020

Postgres по умолчанию сводит названия полей и таблиц к нижнему регистру. Например, если есть поле testTest в таблице my_table, то запрос SELECT testTest FROM my_table вернет ошибку, что поля testtest нет. Чтобы получить значение этого поля нужно заключать название в кавычки. Запрос SELECT "testTest" FROM my_table отработает нормально.


  Сведения об ответе

PHPH

14:46, 27th August, 2020

Нет, нужно получить не поле а значение из поля.

SELECT * FROM table WHERE = 'testtest';

или

WHERE = 'TestTest';

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

Вариант, который предложил DevMan более менее подходит, но подавать на вход значение в нижнем регистре мне не всегда удобно.


  Сведения об ответе

прога

05:03, 16th August, 2020

WHERE column ILIKE 'TestTest' подходит, Спасибо DevMan.


  Сведения об ответе

9090

21:06, 1st October, 2020

Теперь логичные вопросы про скорость.

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тысяч.

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться