我们知道,通过指定排序选项,字符串Tarantool索引可以不区分大小写:collation=“unicode\u ci”
。例如。:
t = box.schema.create_space("test")
t:format({{name = "id", type = "number"}, {name = "col1", type = "string"}})
t:create_index('primary')
t:create_index("col1_idx", {parts = {{field = "col1", type = "string", collation = "unicode_ci"}}})
t:insert{1, "aaa"}
t:insert{2, "bbb"}
t:insert{3, "ccc"}
现在我们可以执行不区分大小写的查询:
tarantool> t.index.col1_idx:select("AAA")
---
- - [1, 'aaa']
...
但是如何使用SQL呢?这不起作用:
tarantool> box.execute("select * from \"test\" where \"col1\" = 'AAA'")
---
- metadata:
- name: id
type: number
- name: col1
type: string
rows: []
...
这也不是:
tarantool> box.execute("select * from \"test\" indexed by \"col1_idx\" where \"col1\" = 'AAA'")
---
- metadata:
- name: id
type: number
- name: col1
type: string
rows: []
...
有一个肮脏的把戏,性能很差(完全扫描)。我们不想要它,是吗?
tarantool> box.execute("select * from \"test\" indexed by \"col1_idx\" where upper(\"col1\") = 'AAA'")
---
- metadata:
- name: id
type: number
- name: col1
type: string
rows:
- [1, 'aaa']
...
最后,我们还有一个解决办法:
tarantool> box.execute("select * from \"test\" where \"col1\" = 'AAA' collate \"unicode_ci\"")
---
- metadata:
- name: id
type: number
- name: col1
type: string
rows:
- [1, 'aaa']
...
但问题是,它是否使用索引?如果没有索引,它也可以工作。。。
可以检查查询计划以确定是否使用了特定的索引。要获取查询计划,只需将“解释查询计划”前缀添加到原始查询。例如:
tarantool> box.execute("explain query plan select * from \"test\" where \"col1\" = 'AAA' collate \"unicode_ci\"")
---
- metadata:
- name: selectid
type: integer
- name: order
type: integer
- name: from
type: integer
- name: detail
type: text
rows:
- [0, 0, 0, 'SEARCH TABLE test USING COVERING INDEX col1_idx (col1=?) (~1 row)']
...
所以答案是“是”,在这种情况下使用索引。
另一个例子是:
box.execute("select * from \"test\" indexed by \"col1_idx\" where \"col1\" = 'AAA'")
不幸的是,这种比较中的排序规则是二进制的,因为索引的排序规则被忽略。在SQL中,比较期间只考虑使用列的排序规则。此限制将在相应问题解决后立即解决。
问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut
问题内容: 我有这个json文件: 我使用以下Go代码搜索数据: 它会查找是否通过“板球”之类的相同字符串进行搜索,但是如果我搜索此“板球”之类的字符串,则不会找到它。 问题答案: 添加到您的RegEx。
问题内容: 我正在使用Flask-SQLAlchemy从用户数据库中查询;但是,虽然 will return doing returns 我想知道是否有一种以不区分大小写的方式查询数据库的方法,以便第二个示例仍然返回 问题答案: 你可以使用过滤器中的或功能来完成此操作: 另一种选择是使用而不是进行搜索:
问题内容: 有谁知道如何使用Postgres 7.4进行不区分大小写的搜索/查询? 我在考虑RegEx,但不确定如何执行此操作,或者不确定是否有函数/标志或可以添加查询的内容? 我正在使用PHP连接并执行查询。 因此,我正在寻找匹配地址信息的方法。 例子: 有什么想法吗? 问题答案: 使用,例如: 文件资料。 或者,您可以使用或,例如:
我有一个Spring Data Neo4j(3.4.0.RELEASE)实体,它带有一个
问题内容: 使用Spring CrudRepository查询;我想使用“名称”属性选择“设备类型”实体。但是下面的查询选择区分大小写的权利。我如何使其不区分大小写。谢谢。 问题答案: 就像评论中提到的@Peter一样,只需添加: 请参阅文档,以获取方法名称中所有受支持的关键字的列表。