2012-03-01 18 views
1

私はこのクエリをPostgresで持っています。ここで私はvarcharフィールドに従って少量の行を並べています。例えばPostgres UTF8の注文

:PostgresのでUTF8文字列を注文に誤りがあるようです

「G」は103ですが、 SELECT convert_to('W', 'SQL_ASCII') < convert_to('g', 'SQL_ASCII')';を実行中 SELECT 'W' < 'g';を実行すると falseを返します。一方、UTF8は、87であるに

「W」 trueを返します。

照合はen_US.UTF-8です。

この現象についての説明はありますか?それを避ける方法は?

答えて

0

順序はUnicodeコードポイントではなく、照合順序によって定義されます。 UTF-8では、 'A' < 'a' < 'B' < 'b'などがあります。

ほとんどの人(コーダーを除く)はこの注文を期待しています。しかし、必要に応じて自由にASCIIと照合することができます。あなたはUTF8エンコードを使用している場合

1

これは、最初のUnicodeコードポイントのいくつかのASCII照合順序が表示されます:今

select s, chr(s) from generate_series(32, 255) s order by chr(s) collate "C"; 

同じ語pt_BR(ブラジルポルトガル語)の照合のために:

select s, chr(s) from generate_series(32, 255) s order by chr(s) collate "pt_BR"; 

照合(en_US.UTF-8)とは、ドットの前の照合とドットの後の符号化のことです。

関連する問題