LoginSignup
4
4

More than 5 years have passed since last update.

すでに構築済みのRDS(PostgreSQL)で日本語ソートがおかしい場合のmigration

Posted at

起きた事象

AWSのElastic Beanstalkで構築したRDS(PostgreSQL)で、日本語のソートがおかしいことに気づいた。
レコードにはひらがなが入っているのに、アルファベットに変換してソートされたような挙動になっていた。

調査

どうやらよくあることらしく、COLLATEの設定によるものらしい。

ebdb=> SHOW LC_COLLATE;
 lc_collate  
-------------
 en_US.UTF-8
(1 行)

対応

DBは本番環境ですでに動いており、このカラムのみをソートにつかっているため、カラムのcollate設定をmigrationで変更することにした。

db/migrate/20150724062401_change_kana_collate_to_users.rb
class ChangeKanaCollateToUsers < ActiveRecord::Migration
  def change
    execute 'alter table users alter COLUMN kana type varchar(255) collate "ja_JP.utf8";'
  end
end

あとはいつもの通り、migrateするだけ。(git aws.pushで自動適用される)

テスト

開発環境では、デフォルトがja_JP.utf8になっていたので、ソートに問題は起きていなかった。
上記のmigrationスクリプトが正常に動作することを確認するため、事前に手動で上記のカラムのcollate設定を変更した。

> alter table users alter COLUMN kana type varchar(255) collate "en_US.UTF8";

この上で、migrateコマンドが正常に動作することを確認した。

$ rake db:migrate
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4