クエリ
select 'T' union all select 'Z' order by 1
戻り値
Z
T
しかし、正しい順序は
T
Z
3つの異なるOSで試してみました
- Windows2003サーバー「PostgreSQL9.1.3、Visual C ++ビルド1500、32ビットでコンパイル」
- Windows7「PostgreSQL9.2.1、Visual C ++ビルド1600、32ビットでコンパイル」
- Debian「x86_64上のPostgreSQL9.1.2-unknown-linux-gnu、gcc-4.4.real(Debian 4.4.5-8)4.4.5、64ビットでコンパイル」
データベース設定は次のとおりです。
Collation: et_EE.UTF-8
Character type: et_EE.UTF-8
これを修正する方法は?
アップデート
データベースはを使用して作成されました
CREATE DATABASE mydb WITH TEMPLATE=template0 OWNER=mydb_owner ENCODING='UNICODE'
OSロケールはすべての場合でエストニア語であったため、データベースはエストニア語ロケールで作成されました。
select 'Z' collate "et_EE" union all select 'S' collate "et_EE" order by 1
正しい順序を返します:
S
Z
しかし
select 'Z' collate "et_EE" union all select 'T' collate "et_EE" order by 1
回答に記載されているように、無効な順序を返します。
Z
T