H2数据库排序规则:选择什么?

Ret*_*ner 5 search collation h2 sql-order-by

经过大量阅读和实验后,似乎我想要主要的搜索强度,但第三或相同的排序强度。主要问题:用 H2(或任何其他数据库)可以实现吗?

\n\n

第二个问题:我是这里唯一的人吗?或者你们中有人也喜欢上述组合吗?一些确认会对我的理智有所帮助。

\n\n

背景:\n似乎只能在创建数据库的一开始就设置排序规则。所以我想确保选择正确的一个。我主要考虑这些用例(目前):

\n\n
    \n
  1. 用户可以开始输入内容来过滤表格的搜索字段:这里 PRIMARY 似乎是最合适的,以避免丢失任何结果(用户习惯于 Google...)。尽管如此,如果能够为用户提供启用二级或三级排序规则以进行更精确搜索的选项,那就太好了。

  2. \n
  3. 排序:当用户单击表列来对内容进行排序时,TERTIARY/IDENTICAL 排序似乎比较合适。这就是我从日常经验中习惯的。

  4. \n
\n\n

我在这里阅读了官方 H2 文档: http: //www.h2database.com/html/commands.html#set_collat ​​ion 。 \n在这里:http://www.h2database.com/html/datatypes.html#varchar_ignorecase_type \n更多相关信息:\n排序规则强度和本地语言关系

\n\n

测试sql(来自https://groups.google.com/forum/?fromgroups=#!topic/h2-database/lBksrrcuGdY):

\n\n
drop all objects;\nset collation english STRENGTH PRIMARY;\ncreate table test(name varchar);\ninsert into test values (\'\xc3\x80\'), (\'\xc3\x84\'), (\'\xc3\x82\'), (\'A\'), (\'\xc3\xa0\'), (\'\xc3\xa4\'), (\'\xc3\xa2\'), (\'a\'), (\'\xc3\xa0a\'), (\'\xc3\xa4a\'), (\'\xc3\xa2a\'), (\'aa\'), (\'B\'), (\'b\');\nselect * from test where name like \'a\' order by name;\nselect * from test order by name;\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n

Log*_*Mzz 2

如果您想对单个数据有两种行为,您必须:

  • 将数据拆分为两列,
  • 或使用两个运算符集。

出于您的目的,通常存储原始数据的“规范”表示,以便以规范形式进行搜索,然后排序/显示原始数据。也许您应该使用一些“文本搜索引擎”,例如Apache Lucene

对于纯 H2 解决方案,您可以将H2 别名计算列或查询条件一起使用。第一个解决方案允许建立索引来加快查询速度。