Active Record 是否提供了一种方法来生成强制文本搜索区分大小写的 SQL?
指示创建字符串类型列的 Ruby-on-Rails 生成器在 mysql
数据库中生成一个简单的 VARCHAR(255)
字段。结果是 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')
这不是一个足够普遍的需求吗?
最佳答案
In short: there is NO
ActiveRecord
idiom for case-sensitive search.
For case-insensitive search you can try to use this. It still works, but source code was changed a bit. So, use it on your own risk.
通常,区分大小写是 Collation 的子集成语。 不同的 DBMS 对字符串(文本)数据类型使用非常不同的默认 排序规则,包括默认大小写敏感性。 Detailed description用于 MySQL。
有一个 sql 运算符 COLLATE
在 DBMS 中很常见(但似乎仍然不在 SQL 标准中)。
但是 ActiveRecord
来源仅在模式创建代码中显示它。
ActiveRecord
和 Arel
gems 都不在 where
搜索中使用 COLLATE
(悲伤)。
注意: 请不要在问题中遗漏数据库标签(mysql
等)。
SO 上有许多没有标签(或带有 sql
标签)的问题和答案,它们与大多数 DBMS 完全无关,除了作者的。
关于mysql - 使用 Active Record 区分大小写的数据库搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380860/