PostgreSQL 喜欢不返回匹配的实例
PostrgeSQL like
函数如何工作?我使用令牌输入来限制用户仅使用现有值的输入。
我在数据库中有以下值:
`Yellow, White, Orange...`
我的代码
@colors = Color.where("name like ?", "%#{params[:q]}%")
如果我输入 w
例如,不建议使用 White
。我必须输入第二个字母才能看到怀特的提议。因为 Db 值全部以大写字母开头,所以我怀疑与 SQLite 存在差异。
我发现这个 post 提到了 ILIKE
但想知道是否有一些适用于 Postgres 和 SQLite 的通用代码。
How does the PostrgeSQL like
function work? I'm using token inputs to limit input from user with only existing values.
I have the following values in the DB:
`Yellow, White, Orange...`
My Code
@colors = Color.where("name like ?", "%#{params[:q]}%")
If I type in w
for example White
is not proposed. I have to type in second letter to see White proposed. Because Db values all start by Capital letter I suspect a difference with SQLite.
I found this post which mentions ILIKE
but was wondering if there is some common code that work both with Postgres and SQLite.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SQLite
LIKE
运算符默认不区分大小写。在 PostgreSQL 中,
ILIKE
是LIKE
的不区分大小写的版本。还有运算符:这三个表达式在 PostgreSQL 中实际上都是相同的:
最后一行主要在两者中都有效 SQLite 和 PostgreSQL< /a>.我添加了相应手册页的链接。
有一个限制:SQLite 只能识别小写/大写的 ASCII 字符,而 PostgreSQL 也可以识别其他 UTF-8 字符。
The SQLite
LIKE
operator is case insensitive per default.In PostgreSQL
ILIKE
is the case insensitive version ofLIKE
. There are also operators:These three expressions are all effectively the same in PostgreSQL:
The last line mostly works in both SQLite and PostgreSQL. I added links to the respective manual pages.
A limitation applies: SQLite only understands lower / upper case of ASCII characters, while PostgreSQL understands other UTF-8 characters, too.
LIKE 是否区分大小写取决于您使用的数据库。有些数据库在使用 LIKE 时会忽略大小写,有些则不会,有些会考虑各种配置选项。解决这个问题的一种方法是通过转换为大写或小写来自行规范化大小写:
The case-sensitivity of LIKE depends on the database you use. Some databases ignore case when using LIKE, some don't, some look at various configuration options. One way around this is to normalize the case yourself by converting to upper or lower case: