sql >> データベース >  >> RDS >> PostgreSQL

Postgresql9.4のスペースを含む誤った並べ替え/照合/順序

    Unix / Linux SEでは、フレンドリーな専門家が、あなたが見ているものがUnicodeをソートする適切な方法であると説明しました。基本的に、標準は並べ替えを試みています:

    di Silva Fred                  di Silva Fred
    di Silva John                  diSilva Fred
    diSilva Fred                   disílva Fred
    diSilva John         ->        di Silva John
    disílva Fred                   diSilva John
    disílva John                   disílva John
    

    スペースが文字と同じくらい重要である場合、ソートはフレッドとジョンのさまざまな同一のスペルを分離できませんでした。つまり、最初にスペースなしでソートされます。次に、2番目のパスで、空白なしで同じ文字列がソートされます。 (これは単純化したものであり、実際のアルゴリズムはかなり複雑に見え、空白、アクセント、および印刷不可能な文字にさまざまなレベルの優先順位を割り当てます。)

    次のように設定することで、Unicode照合をバイパスできます。

    export LC_ALL=C
    

    または、Postgresでソートのためにバイト配列にキャストする:

    order by name::bytea
    

    または(キルンの回答から)Cを指定します 照合:

    order by name collate "C"
    

    または、列のデフォルトの照合を変更することによって:

    alter table products alter column name type text collate "C";
    



    1. MySQLはORDERBYで行の位置を取得します

    2. Web2py –SQLiteからMySQLへの移行

    3. 「エラー1054(42S22):MariaDBの「orderclause」の不明な列「colname」」を修正しました

    4. Hibernateを使用して階層結果を取得するためのデータベースクエリの再帰-Java