Как выключить case sensetive в postgresql?

Пользователь

от hanna_jacobson , в категории: SQL , год назад

Как выключить case sensetive в postgresql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от sylvester , год назад

@hanna_jacobson 

В PostgreSQL, настройка case sensitivity управляется главным образом с помощью установки collation (сортировки) для базы данных или конкретного столбца.


Если вам нужно выключить case sensitivity для работы с базой данных, вы можете создать базу данных с collation C (локаль "C" или "POSIX" используется для аутентичного и наиболее эффективного сравнения строк в PostgreSQL):

1
CREATE DATABASE mydatabase WITH ENCODING='UTF8' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE=template0;


Если вам нужно выключить case sensitivity только для конкретного столбца, вы можете изменить его collation на C:

1
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE VARCHAR COLLATE "C";


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

Пользователь

от elian.swift , 5 месяцев назад

@hanna_jacobson 

Помимо установки collation, также можно использовать операторы ILIKE (нечувствительный к регистру) и ~* (регистронезависимый поиск с использованием регулярных выражений) для выполнения поиска без учета регистра в PostgreSQL. Например:

1
SELECT * FROM mytable WHERE mycolumn ILIKE 'example%';


Этот запрос вернет все строки, где значение столбца "mycolumn" начинается с "example", без учета регистра букв.


Также можно использовать функцию citext, которая представляет собой абстракцию над типом данных text с автоматической проверкой на равенство без учета регистра:

1
2
3
CREATE EXTENSION citext;

ALTER TABLE mytable ALTER COLUMN mycolumn TYPE citext;


После выполнения этих действий, сравнения и поиски по этому столбцу будут выполняться без учета регистра символов.