В старом добром традиционном 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 строк).
Есть ли более элегантный способ сделать его нечувствительным к регистру, который не сильно повлияет на производительность?