Active Record是否提供一种生成SQL的方法,该SQL强制文本搜索区分大小写?
被指示创建字符串类型列的Ruby-on-Rails生成器在VARCHAR(255)
数据库中生成一个简单的mysql
字段。原来是queries on such columns are case insensitive by default。
因此,是Active Record搜索,例如:
Secret.where(token: 'abcde')
将匹配具有令牌abcde
,ABcdE
等的记录。
无需更改底层数据库列(例如,指定utf8_bin
归类),可以通过显式调整where
子句使搜索区分大小写:
Secret.where('binary token = ?', 'abcde')
但是,这是特定于数据库的,我想知道Active Record是否有一个习惯用法可以对任何数据库完成相同的操作。例如,类似于where.not
的构造:
Secret.where.binary(token: 'abcde')
这不是足够普遍的需求吗?
答案 0 :(得分:0)
简而言之:区分大小写的
ActiveRecord
没有成语-敏感 搜索。
对于大小写(不敏感),您可以尝试使用 this。 它仍然有效,但是源代码有所更改。因此,在您的 自担风险。
通常,区分大小写是Collation惯用语的子集。 不同的DBMS对字符串(文本)数据类型使用非常不同的 default 归类,包括默认情况下的敏感性。 Detailed description for MySQL。
有一个SQL运算符COLLATE
在DBMS中非常常见(但在SQL Standard中似乎仍然不存在)。
但是ActiveRecord
源仅在模式创建代码中显示它。
ActiveRecord
和Arel
宝石在COLLATE
搜索(悲伤)中都不使用where
。
注意:请不要错过问题中的数据库标签(mysql
等)。
关于SO的许多问答没有标签(或带有sql
的标签),这与最的DBMS完全无关,除了作者的标签。