Сделать Collection :: find () регистронезависимым в MySQL X DevAPI - PullRequest
0 голосов
/ 08 апреля 2020

В старом добром традиционном MySQL оператор LIKE по умолчанию не учитывает регистр, но вы можете элегантно сделать его чувствительным к регистру, добавив COLLATION , например:

col_name LIKE 'a%' COLLATE utf8mb4_0900_as_cs

Напротив, я обнаружил, что новый метод X DevAPI Collection::find() учитывает регистр чувствителен по умолчанию (не задокументирован) , но он не принимает параметры сортировки.

Я могу смоделировать нечувствительность к регистру, приведя его к нижнему регистру следующим образом:

$collection->find('LOWER(name) LIKE :param')
            ->bind(['param' => '%ce%'])
            ->sort('name ASC')
            ->execute();

Но даже с индексом в этом столбце это делает его намного медленнее (до 3 раз медленнее, чем тот же запрос) на традиционном столбце, используя пример набора из 10000 строк).

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

...