使用 CodeIgniter 在 MySQL 中匹配区分大小写的 LIKE 和 WHERE 子句

Case sensitive LIKE and WHERE clause matching in MySQL using CodeIgniter

我的 database/table/column 排序规则设置为 *_ci 表示不区分大小写。我想要的是使用 CodeIgniter 为 LIKE 和 WHERE 子句在 运行 时间编写区分大小写的查询。我试过类似这样的方法

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

但是这种方法不适用于 LIKE 子句

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

我们将不胜感激任何类型的帮助!

您可以使用 get() 方法,例如:

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

这个怎么样

$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%'

所以你可以试试

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

您可以根据需要控制通配符 (%) 您可以使用 'before''after''both'。如果不需要通配符,则可以简单地将第三个参数作为 none 传递。

勾选DOCS

很好很好很好...

经过四处寻找和敲打我的脑袋,我终于解决了这个问题!首先,我必须将 table/column 的排序规则设置为 *_cs,之后如果我需要区分大小写的匹配,我必须 运行 简单

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

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

但是如果你想要不区分大小写的匹配而不是使用

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

$this->db->where() accepts an optional third parameter. If you set it to FALSE, CodeIgniter will not try to protect your field or table names with backticks.

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

Remember CodeIgniter follows the standard collation of your MySQL database, there is no built in function is available in CI 2.x to over write default database collation. So if your column/table collation is set to *_ci (case insensitive) CI will consider abc = aBc but if your collation is set as *_cs it will consider abc != aBc