ActiveRecord“lower(column_name)”仍然区分大小写。 (MySql2,Rails)

时间:2015-10-02 20:42:46

标签: ruby-on-rails ruby activerecord mysql2

我在我的Rails应用程序中使用MySql2。我正在尝试创建一个activerecord查询,返回所有包含指定字符串的字段的记录。我已经阅读了我的输入内容,然后使用lower(column_name) LIKE 'string'应该可以解决问题,但是这似乎不起作用。我的查询完全如下:

search = params[:search].to_s.downcase

@current_user.patients.where("lower(last_name) LIKE ? OR lower(first_name) LIKE ? OR lower(identifier) LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%")

假设我有一个姓氏为“Abbott”的记录。当我的搜索参数是“Abb”或“bot”时,将返回此记录。但是,当搜索参数是“abb”或“Bot”时,不返回任何内容。看来查询仍然区分大小写

我看了一遍,似乎无法找到答案。我已多次阅读lower(column_name)应该有效,但事实并非如此。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了。确实是因为字段存储为二进制值(感谢Vincent)。通过将二进制字段转换为CHAR,我能够对它们进行不区分大小写的比较:

@current_user.patients.where("CAST(last_name AS CHAR) LIKE ? OR ...