Mysql 使用活动记录进行区分大小写的数据库搜索
活动记录是否提供了一种生成SQL的方法,强制文本搜索区分大小写? RubyonRails生成器被指示创建字符串类型列,并在Mysql 使用活动记录进行区分大小写的数据库搜索,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,活动记录是否提供了一种生成SQL的方法,强制文本搜索区分大小写? RubyonRails生成器被指示创建字符串类型列,并在mysql数据库中生成一个简单的VARCHAR(255)字段。原来是这样 因此,活动记录搜索,例如: Secret.where(token: 'abcde') 将使用令牌abcde,abcde等匹配记录 在不更改基础数据库列(例如指定utf8\u bin排序规则)的情况下,可以通过显式调整where子句使搜索区分大小写: Secret.where('binary token
mysql
数据库中生成一个简单的VARCHAR(255)
字段。原来是这样
因此,活动记录搜索,例如:
Secret.where(token: 'abcde')
将使用令牌abcde
,abcde
等匹配记录
在不更改基础数据库列(例如指定utf8\u bin
排序规则)的情况下,可以通过显式调整where
子句使搜索区分大小写:
Secret.where('binary token = ?', 'abcde')
但是,这是特定于数据库的,我想知道Active Record是否有一个习惯用法可以为任何数据库实现同样的功能。例如,类似于where.not的结构:
Secret.where.binary(token: 'abcde')
这难道不是一个足够普遍的需求吗
简而言之:区分大小写没有ActiveRecord
习惯用法
搜索
对于大小写不敏感的搜索,您可以尝试使用
.
它仍然可以工作,但是源代码有点改变。所以,把它用在你的脸上
自己承担风险
一般来说,区分大小写是习惯用法的子集。
不同的DBM对字符串(文本)数据类型使用非常不同的默认排序规则,包括默认的大小写敏感度。
对于MySQL
有一个sql操作符COLLATE
,它在DBMS中非常常见(但似乎仍然不在sql标准中)。
但是ActiveRecord
源代码仅在模式创建代码中显示它。
无论是ActiveRecord
,还是Arel
gems都不在where
search(sad)中使用COLLATE
注意:请不要错过问题中的数据库标签(mysql
etc)。
有许多问题和答案没有标签(或带有sql
one),除了作者的标签外,这些问题和答案与大多数数据库管理系统都是完全无关的。Secret.where('binary token LIKE?','%abcde%')
这个怎么样?@Gabbar,这与我自己的版本类似,实际上,您正在编写特定于数据库的SQL。我的问题是关于是否存在活动记录抽象。我不完全了解您的情况,但据我所知,活动记录还与数据库联系,以向ORM对象返回sql查询。默认情况下,活动记录搜索不区分大小写。此外,AR不是关于“区分大小写”,而是关于SQL构造和将结果映射到对象。我想,DB设置或token
列类型是由Secret.where(token:'abcde')
生成的SQL查询进行不区分大小写搜索的原因。重复:?我最初故意避免使用mysql
标记,因为我问题的本质不是DB特定的。我正在寻找一种可以由AR提供的功能,这样就不必担心特定的数据库语法。不管怎样,tag现在补充道,我留下的笔记不仅仅是给你的:我真的花了“很多”的时间在这上面,了解DBMS Q/a与什么有关。提示:DBMS(特别是postgresql:)标记也会触发一些好消息,所以即使成员不了解Rails,也会回答。