今作っているサービスで日本語のソートがおかしかったので調べていたところ、PostgreSQL 10のICUコレーションを使うと日本語を普通にソートでき、更に文字順序までカスタマイズできるという記事を見つけた。
やってみようと思い、
config/database.yml に以下のように追記してみたが駄目だった
collation: ja-x-icu
ctype: ja-x-icu
ERROR: invalid locale name: "ja-x-icu"
STATEMENT: CREATE DATABASE "develop" ENCODING = 'UTF-8' LC_COLLATE = 'ja-x-icu' LC_CTYPE = 'ja-x-icu'
2018/7 月時点でも CREATE DATABASE では未だにサポートされていないっぽい。
調べたところ、 Active Record の migrate 時にカラムに対して振ればいける
create_table :user do |t|
t.string :name, collation: 'ja-x-icu'
t.text :address, collation: 'ja-x-icu'
end
忘れがちな PostgreSQL の SQL
-- collate を確認
SHOW LC_COLLATE;
-- 使える collate を確認
SELECT * FROM pg_collation;
“`
参考
- PostgreSQL 10のICUコレーションを使うと日本語を普通にソートでき、更に文字順序までカスタマイズできる
- ActiveRecordでデフォルトの照合順序を変更する
- Rails5から使えるActiveRecord便利機能