PostgreSQLの日本語のデータが入ったカラムでソートすると順番がおかしくなるのはエンコードの影響です。(タイトルで言い切った。)
解決策1
convert_toを使う
SELECT t0.ACL_TYPE, t0.FEATURE_ALIAS_NAME, t0.FEATURE_NAME, t0.FEATURE_ID FROM eip_t_acl_portlet_feature t0 ORDER BY convert_to(t0.FEATURE_ALIAS_NAME,'UTF8')
解決策2
手元の環境では意図したソート順にならなかった。
SELECT t0.ACL_TYPE, t0.FEATURE_ALIAS_NAME, t0.FEATURE_NAME, t0.FEATURE_ID FROM eip_t_acl_portlet_feature t0 ORDER BY t0.FEATURE_ALIAS_NAME COLLATE "ja_JP.UTF-8"
手元の環境ではこのように指定することでうまくいきました。
ORDER BY t0.FEATURE_ALIAS_NAME COLLATE "C"
なお、以下のようなエラーが出ることがあります。
ERROR: collation "ja_JP.utf8" for encoding "UTF8" does not exist
collationで指定するのは大文字・小文字、ハイフンとか厳密に見ているっぽいです。
照会順序を調べます。
SHOW LC_COLLATE;
インストールされている照合順序を調べます。
SELECT * from pg_collation;
参考
http://qiita.com/anoworl/items/af9f12f915b8969ea40d
http://se.ykysd.com/2015/09/28/orderby/