MySQL Active记录查询忽略大小写

时间:2011-04-11 17:39:43

标签: mysql codeigniter activerecord case-insensitive

我有以下有效记录查询:

$this->db->select('id, firstname, surname');
$this->db->from('users');
$this->db->where('site_id',$siteid);
$this->db->like('firstname', $name);
$this->db->or_like('surname', $name); 
$query = $this->db->get();

这样可以正常工作,但我在DB中的名字可以包含大写和小写名称。如果案例不匹配,则查询失败。

我有什么方法可以忽略我的查询案例吗?

2 个答案:

答案 0 :(得分:1)

在mysql中操作区分大小写的一种方法是在db中以大写或小写的形式使用firstname字段,并以该格式转换给定的字符串并匹配它。

编辑:喜欢是一个运算符,它取决于您使用的数据库,它将区分大小写。在postgres中,它是不区分大小写的,因为在mysql中它区分大小写。所以这取决于您使用的数据库。

编辑:另一种有效但不是那么有用的方法是在给定字段上使用ucase()或lcase()函数,然后匹配匹配的小写或大写。虽然它会有性能问题。

答案 1 :(得分:1)

试试这个,它适用于我: (您可以在两侧使用较低或较高模式进行不敏感查询)

$this->db->select('id, firstname, surname');
$this->db->from('users');
$this->db->where('site_id',$siteid);
$this->db->like('lower(firstname)', strtolower($name));
$this->db->or_like('lower(surname)', strtolower($name)); 
$query = $this->db->get();