Когда сравниваются строки с учетом регистра и когда регистр не учитывается в SQL?

Когда сравниваются строки с учетом регистра и когда без учета регистра в популярных базах данных, таких как PostgreSQL, MySQL, MariaDB, Oracle, SQL Server и SQLite?

Я имею в виду сравнение с использованием таких операторов, как: 'ab' = 'AB', или сравнение строк, выполняемое внутри строковых функций, таких как: POSITION('b' IN 'ABC'), INSTR('ABC', 'b'), REPLACE('ABC', 'b', 'x'), TRANSLATE('ABC', 'b', 'x'), TRIM('XabcX', 'x').

Я думаю, что знаю ответ, но не знаю, правильный ли он.

Кроме того, определяет ли стандарт SQL регистрозависимость при сравнении строк?

К сожалению, я нашел вопрос только о чувствительном к регистру синтаксисе SQL, а не в сравнение строк.

Изменить: я спрашиваю о настройке по умолчанию для СУБД без дополнительной настройки сортировки базы данных, таблицы или столбца.

Я спрашиваю только об ASCII-буквах A-Z и a-z.


person iwis    schedule 19.11.2020    source источник
comment
SQL всегда чувствителен к регистру   -  person drum    schedule 20.11.2020
comment
Для SQL Server это зависит от сортировки. Большинство людей используют IME без учета регистра и акцента.   -  person Martin Smith    schedule 20.11.2020
comment
I зависит от базы данных и от различных факторов, таких как сопоставление базы данных, таблицы и столбца. Ваш вопрос в его нынешнем виде довольно широк, и на него невозможно дать точный ответ, если вы не предоставите более подробную информацию.   -  person GMB    schedule 20.11.2020
comment
@GMB: я добавил интересующую меня информацию в настройки СУБД по умолчанию, не устанавливая параметры сортировки базы данных, таблицы или столбца. Всегда ли в этой ситуации учитывается регистр по умолчанию?   -  person iwis    schedule 20.11.2020
comment
@GMB: меня также интересуют только буквы ASCII AZ и az и только базы данных PostgreSQL, MySQL, MariaDB, Oracle, SQL Server и SQLite. Пожалуйста, дайте мне знать, если есть какие-либо другие проблемы с вопросом.   -  person iwis    schedule 20.11.2020
comment
Для локального SQL Server необходимо определить параметры сортировки сервера по умолчанию при его установке. Это будет использоваться, если вы не укажете ничего другого на других уровнях. Параметр по умолчанию в пользовательском интерфейсе настройки зависит от ОС, но в двух известных мне случаях это CI_AS.   -  person Martin Smith    schedule 20.11.2020


Ответы (1)


Функции/операторы Oracle DB чувствительны к регистру, за некоторыми исключениями, включая regexp_like, который можно переключить в режим с учетом регистра;

--case sensitive demo
select q.txt 
from (select 'myPhrase' txt from dual) q
where regexp_like(q.txt, 'myphrase');  --empty result set

select q.txt 
from (select 'myPhrase' txt from dual) q
where q.txt like 'myphrase'; --empty result set

select q.txt 
from (select 'myPhrase' txt from dual) q
where q.txt like 'myPhrase'; --exact match; returns value

select q.txt 
from (select 'myPhrase' txt from dual) q
where regexp_like(q.txt, 'myphrase', 'i'); --case insensitive switch 'i'; returns value

select q.txt 
from (select 'myPhrase' txt from dual) q
where lower(q.txt) like 'myphrase'; --enforced match; returns value;

Вот ссылка на документы для Правила сопоставления для различных операций SQL и для Правила сравнения типов данных

После того, как псевдосопоставление определено как используемое, параметры сеанса NLS_SORT и NLS_COMP проверяются, чтобы предоставить фактическое именованное сопоставление для применения Обычно для этих двух параметров установлено значение BINARY.

SELECT
    t.parameter,
    t.value
FROM
    nls_database_parameters t
WHERE
    t.parameter IN (
        'NLS_COMP', 'NLS_SORT'
    );
person Elzzz    schedule 19.11.2020