4

多くの読書と実験の後、検索には PRIMARY 強度が必要ですが、順序付けには TERTIARY または IDENTICAL が必要なようです。主な質問: H2 (または他の DB) で達成することは可能ですか?

二次的な質問: ここにいるのは私だけですか、それとも上記の組み合わせが好きな人はいますか? いくつかの確認は、私の正気に役立ちます。

背景: 照合順序は、データベースを作成する最初の段階でしか設定できないようです。ですから、正しいものを確実に選びたいと思います。私は主にこれらのユースケースを考えています(今のところ):

  1. ユーザーがテーブルをフィルタリングするために入力を開始できる検索フィールド: ここでは、結果が失われないようにするために PRIMARY が最も適切と思われます (ユーザーは Google に慣れています...)。ただし、より正確な検索を行うために、2 次または 3 次照合を有効にするオプションをユーザーに提供できると便利です。

  2. 順序付け: ユーザーが表の列をクリックして内容を並べ替える場合、TERTIARY/IDENTICAL 順序付けが適切と思われます。それは私が日常の経験から慣れていることです。

ここで公式の H2 ドキュメントを読みました: http://www.h2database.com/html/commands.html#set_collat ​​ion 。そしてここ: http://www.h2database.com/html/datatypes.html#varchar_ignorecase_type その他の関連情報: 照合強度とローカル言語の関係

テスト SQL ( https://groups.google.com/forum/?fromgroups=#!topic/h2-database/lBksrrcuGdYから):

drop all objects;
set collation english STRENGTH PRIMARY;
create table test(name varchar);
insert into test values ('À'), ('Ä'), ('Â'), ('A'), ('à'), ('ä'), ('â'), ('a'), ('àa'), ('äa'), ('âa'), ('aa'), ('B'), ('b');
select * from test where name like 'a' order by name;
select * from test order by name;

ここに画像の説明を入力

4

2 に答える 2

2

1 つのデータに対して 2 つの動作が必要な場合は、次のことを行う必要があります。

  • データを 2 つの列に分割し、
  • または 2 つの演算子セットを使用します。

目的のために、正規形式で検索してから生データをソート/表示するために、生データの「正規」表現を保存するのが一般的です。Apache Luceneなどの「テキスト検索エンジン」を使用する必要があるかもしれません。

純粋な H2 ソリューションの場合、計算列またはクエリ条件でH2 エイリアスを使用できます。最初のソリューションでは、インデックスを作成してクエリを高速化できます。

于 2014-12-19T10:58:55.323 に答える