2015-11-10 3 views
2

Как сделать PostgreSQL поиск (WHERE field = 'stackoverflow') нечувствительным к регистру?Как сделать регистр PostgreSQL нечувствительным?

Я не хочу использовать LOWER() по причине ORM и CITEXT по причине нет эффективность. Я нашел решение использовать другую сортировку:

CREATE DATABASE polish_database LC_COLLATE 'pl_PL.UTF-8' LC_CTYPE 
'pl_PL.UTF-8'; 

Но как загрузить регистрозависимости коллации/локали Ubuntu?

+0

что вы имеете в виду локаль Ubuntu? Это сопоставление дает вам ошибку? –

+0

http://www.postgresql.org/docs/current/static/citext.html –

+0

Если вы действительно хотите определить пользовательскую локаль, вы можете начать здесь: [Базовые спецификации Open Group: Locale] (http: // pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html). Также проверьте [Локальный помощник] (http://lh.2xlibre.net/). – klin

ответ

2

Не уверен, что эта помощь.

Но вам не нужно использовать подборку для всей базы данных.

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

CREATE TABLE test1c (
    id integer, 
    content varchar COLLATE "x" 
); 

Также вы можете создать индекс для поддержки Сливать или со значением рассчитайте

CREATE INDEX test1c_content_y_index ON test1c (content COLLATE "y"); 

ИЛИ

CREATE INDEX test1c_content_y_index ON test1c (LOWER(content)); 

Затем вы можете сделать lower() и использовать индекс.

WHERE field = Lower('StackoverFlow') 
2

Я думаю, что это может быть использовано ключевое слово ILIKE.

select 'test' ILIKE 'TEST'; // return true