Чувствительное к регистру совпадение предложений LIKE и WHERE в MySQL с использованием CodeIgniter

Для моей базы данных / таблицы / столбца сортировки установлено значение * _ci без учета регистра. Я хочу написать чувствительный к регистру запрос во время выполнения, используя CodeIgniter for LIKE и WHERE. Я пробовал подход примерно так

$this->db->where("fieldname LIKE BINARY 'value'", NULL, true);

Но этот подход не работает с предложением LIKE

$this->db->like("fieldname LIKE BINARY 'value'", NULL);

Любая помощь будет принята с благодарностью!

2

Решение

Как насчет этого

$value = "abdulla";
$query = $this->db->query("SELECT * FROM table WHERE fieldname1 Like '%$value%' OR fieldname2 Like '%$value%'");
$result = $query->result_array();

на самом деле $this->db->like(); вести себя как WHERE ??? LIKE '???'

Например

$this->db->like('name', 'abdulla');
// Produces: WHERE name LIKE '%abdulla%'
2

Другие решения

Вы можете сделать это с get() метод как:

$result = $this->db
->where('fieldname like binary "value"', NULL, FALSE)
->get('table')
->result();
1

Таким образом, вы можете попробовать это как

$this->db->like('fieldname', 'value');

Вы можете контролировать подстановочный знак (%) согласно вашим потребностям вы можете использовать 'before', 'after' а также 'both', Если вам не нужен подстановочный знак, тогда вы можете просто передать третий параметр как none,

Проверить DOCS

1

Так так так …

После осмотра и удара головой я наконец решил эту проблему! Прежде всего я должен установить параметры сортировки таблицы / столбца на * _cs, после этого, если мне нужно совпадение с учетом регистра, я должен выполнить простой

$this->db->where('field', 'value');

или же

$this->db->like('field', 'value');

Но если вы хотите сопоставление без учета регистра, чем использовать

$this->db->where("LOWER('field')", strtolower('value'), false);

$ this-> db-> where () принимает необязательный третий параметр. Если вы установите значение FALSE, CodeIgniter не будет пытаться защитить имена полей или таблиц обратными галочками.

или же

$this->db->like("LOWER('field')", strtolower('value'));

Помните, что CodeIgniter следует стандартному сопоставлению вашей базы данных MySQL, в CI 2.x нет встроенной функции для перезаписи сопоставления базы данных по умолчанию. Поэтому, если для вашей сортировки столбца / таблицы установлено значение * _ci (без учета регистра), CI будет рассматривать abc = aBc, но если для вашей сортировки установлено значение * _cs, он будет учитывать abc! = ABc

-1