我怎样才能使这个查询不是 CaSe SeNsITIVe?
how can I make this query not CaSeSeNsITIVe?
如何让这个查询不区分大小写?
@courses = Course.where('name LIKE ?', "%#{params[:name]}%")
一个典型的解决方案是在比较它们之前将两个值都变成小写:
@courses = Course.where('LOWER(name) LIKE LOWER(?)', "%#{params[:name]}%")
根据您的 RDMBS,LOWER()
可能不可用。
另外,根据您的 RDBMS,可能会有更有效的选项可用(因为使用字符串函数基本上会破坏现有索引)。例如在 MySQL 中,您在相关列上设置了不区分大小写的排序规则,这将使所有字符串比较默认不区分大小写,同时允许使用索引。
当您使用 Postgres 数据库时,您可能需要考虑 ILIKE
,这是 LIKE
:
的不区分大小写的版本
@courses = Course.where('name ILIKE ?', "%#{params[:name]}%")
如何让这个查询不区分大小写?
@courses = Course.where('name LIKE ?', "%#{params[:name]}%")
一个典型的解决方案是在比较它们之前将两个值都变成小写:
@courses = Course.where('LOWER(name) LIKE LOWER(?)', "%#{params[:name]}%")
根据您的 RDMBS,LOWER()
可能不可用。
另外,根据您的 RDBMS,可能会有更有效的选项可用(因为使用字符串函数基本上会破坏现有索引)。例如在 MySQL 中,您在相关列上设置了不区分大小写的排序规则,这将使所有字符串比较默认不区分大小写,同时允许使用索引。
当您使用 Postgres 数据库时,您可能需要考虑 ILIKE
,这是 LIKE
:
@courses = Course.where('name ILIKE ?', "%#{params[:name]}%")