У меня есть запрос, который ищет строку в таблице поиска, просто используя =
В таблице есть такие данные:
"some_column" | "my_string_val"
---------------------------------------
'returned_val' | 'STRING_OF_INTEREST'
Здесь только строковый литералимеет альфа-символы:
SELECT some_column FROM my_lookup_table
WHERE my_string_val = 'STRING_OF_INTEREST';
Во всех базах данных и клиентах этот запрос возвращает совпадающую строку.
Здесь строковый литерал имеет несколько конечных пробельных символов:
SELECT some_column FROM my_lookup_table
WHERE my_string_val = 'STRING_OF_INTEREST ';
В этом конкретном контексте этот запрос возвращает соответствующую строку:
- окружение:
- dev
- база данных:
- чтение-запись
- клиент:
- PHP cli
- встроенный sql клиент PHPStorm
В ALL других комбинаций контекста второй запрос возвращает NO соответствующих строк:
- environment:
- dev
- prod
- база данных:
- чтение-запись
- только для чтения
- клиент:
- PHP cli
- PHPStВстроенный клиент orm
- DataGrip - тот же драйвер, что и PHPStorm
- Клиент командной строки MySQL
- Приложение Sequel Pro
Я знаю, что ожидаемое поведение mysql заключается в заполнении строк до тех пор, пока они не будут одинаковой длины для сравнения, из этих сообщений:
... и я могу подтвердить это поведение во всех контекстах, перечисленных выше, с более простымquery
select 'a' = 'a ';
-> 1
Примечание: все рассматриваемые базы данных / таблицы / столбцы имеют набор символов utf8mb4
и параметры сортировки utf8mb4_general_ci
Итак .... почему разница?Почему так много контекстов НЕ совпадают в конечных пробелах, когда некоторые это делают, и когда по правилам mysql и стандарту SQL они должны совпадать?
Что еще я могу проверить, чтобы найти различия между средами?
Спасибо!