Мы портируем приложение, которое раньше использовало Openbase 7, чтобы теперь использовать MySQL 5.0.
OB 7 имел довольно плохо определенное (то есть недокументированное) поведение в отношении чувствительности к регистру. Мы узнали об этом только сейчас, когда пытались выполнить те же запросы с MySQL.
Похоже, что OB 7 обрабатывает запросы с использованием "=" иначе, чем с использованием "LIKE": если у вас есть два значения "a" и "A" и выполняется запрос с WHERE f = "a", то он находит только поле «а», а не поле «А». Однако, если вы используете LIKE вместо «=», он находит оба.
Наши тесты с MySQL показали, что если мы используем недвоичное сопоставление (например, latin1), то и "=", и "LIKE" сравниваются без учета регистра. Однако, чтобы имитировать поведение OB, нам нужно получить только "=" с учетом регистра.
Сейчас мы пытаемся выяснить, как справиться с этим в MySQL, не добавляя много вызовов функции LOWER () ко всем нашим запросам (их много!).
Мы имеем полный контроль над БД MySQL, что означает, что мы можем выбирать режим сортировки по своему усмотрению (к счастью, наши имена таблиц и уникальные индексы не подвержены влиянию чувствительности к регистру).
Любые предложения, как имитировать поведение OpenBase на MySQL с наименьшим количеством изменений кода?
(я понимаю, что некоторые умные замены регулярных выражений в нашем исходном коде для добавления вызовов LOWER могут помочь, но мы бы предпочли найти другой способ)