Herokuでのデプロイで色々詰まった4
こんにちは、ぐっちと申します。
前回に続いて、本番環境にデプロイした後に起こった事について書いていきたいと思います。
日本語のソートがおかしい
データベースからレコードを五十音順に並べて表示しているページがあるのですが、並びがローカルの時とまるで違う。
具体的には
「アイ」「アイサツ」「イエス」「イヌ」と並んでいたものが、
「アイ」「イヌ」「イエス」「アイサツ」という並びになっている……
どうやら文字数別に、五十音順で並んでいる模様。
色々調べると、原因はローカルではデータベースがMySQLで、HerokuではHeroku Postgres というデータベースを使っており、デフォルトのソート方法が違う為でした。
実際に私が行った解決手順は
1. ターミナルにて、ローカルのアプリディレクトリへ移動
2. $ heroku pg:psql コマンドでデータベースへ接続
3. =>SHOW LC_COLLATE; コマンドでソートを確認
=> SHOW LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 row)
この en_US.UTF-8 というのが、日本語のソートを変にしている様です。
4. ALTER TABLE モデル名 ALTER COLUMN カラム名 TYPE VARCHAR COLLATE "ja_JP.utf8"; コマンドでテーブル・カラムを指定して、ソートを変更
5.=> \d テーブル名 コマンドで変更されているか確認
Column | Type | Collation | Nullable | Default
-------------+-----------------------------+------------+----------+-----------------------------------
id | bigint | | not null | nextval('birds_id_seq'::regclass)
name | character varying | ja_JP.utf8 | not null |
name のCollation がja_JP.utf8 に変わっています。
本番環境にアクセスした所、並び方が変わっていました。
ローカルと環境が違うので、デプロイは改めて難しいものだと思いました。
ここまで読んでくださり、ありがとうございました。
ツイッターで日々の学習をつぶやいています(@Yamaguc45844169)