【问题标题】:Syntax error for where() active record querywhere() 活动记录查询的语法错误
【发布时间】:2016-01-08 22:20:17
【问题描述】:

我正在尝试执行以下活动记录查询,但不断收到语法错误。

@kid.toys.where("name ILIKE ? OR description ILIKE ?", params[:query], params[:query])

我正在尝试查找所有玩具,name 类似于 params[:query]description 类似于 params[:query]

我得到的语法错误如下:

{"error":"Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ILIKE '\\\"robot\\\"' OR `description` ILIKE '\\\"robot\\\"')' at line 1: SELECT `items`.* FROM `items` WHERE `items`.`kid_id` = 2 AND (`name` ILIKE '\\\"robot\\\"' OR `description` ILIKE '\\\"robot\\\"')"}

非常感谢任何帮助或指导。我会继续四处寻找答案。

【问题讨论】:

    标签: mysql ruby-on-rails rails-activerecord


    【解决方案1】:

    ILIKE 不是 MySQL 中的运算符。你只是想使用LIKE吗?

    @kid.toys.where("name LIKE ? OR description LIKE ?", params[:query], params[:query])
    

    如果您希望强制模式匹配不区分大小写,则可以通过将COLLATE 子句添加到每个LIKE 操作的任一操作数来显式使用case-insensitive collation。例如:

    @kid.toys.where("name LIKE ? COLLATE utf8_general_ci OR description LIKE ? COLLATE utf8_general_ci", params[:query], params[:query])
    

    【讨论】:

    • 我会调查的。如果没有 COLLATE,它就不会做我想要的,也许这会让它工作
    • 我不希望返回一个空数组,但这就是返回的内容:(COLLATE 没有修复它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2013-06-23
    • 2015-04-16
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多