PostgreSQLのソート時にCOLLATIONを指定する
PostgreSQLで日本語文字列を含むカラムでソートする際に、設定によっては狙った結果と異なる順序になってしまう場合がある。
-- COLLATIONを指定しない場合
select * from customer order by furigana asc
その場合は、COLLATE
句を使用して照合順序を指定できる。
-- COLLATIONを指定する場合
select * from customer order by furigana collate "ja_JP" asc
Ebean
でCOLLATIONを指定する場合は以下のようにasc()
またはdesc()
メソッドの第二引数として指定すれば良い。
ただしバージョンによっては生成されるSQLにダブルクォートがつかない場合があるため、自身でダブルクォートで囲む必要があることに注意。
Ebean.find(Customer.class).query()
.order().asc("furigana", "\"ja_JP\"")
.findList();