私は、言語のスピーカーとして、ÕÜÄÄのようないくつかの非共通の文字を持っています。私は、ユーザーがエストニア語のコンテンツをデータベースに保存できるアプリケーションを作成すれば、アプリは言語設定に従ってデータを正しく並べ替えることもできます。Postgresqlのソート言語の特定の文字(照合)
また、非常に小さな言語の槍として、エストニアのように、他の人々がアプリを使用し、自分の言語でソートしたいと考える必要があるということを考慮する必要があります。いくつかのヨーロッパ言語には、独自の特殊文字が混在しています。
ロシア語のような言語をミックスに含めると、さらに悪いことに、それらは完全に異なる文字を持ちます。
私はdjangoサイトでこれらの特殊文字をすべて表示できることを知っているので、データベースレベルでの並べ替えが心配です。だから、どうすればオブジェクトがデータベースから読み込まれ、正しい言語固有の順序にソートされるかを確認することができます。
例の場合: iはUTF8エンコーディングで、デフォルトの照合(英語UTF8)を使用してデータベースを作成する場合、値
alan
oskar
ölen
älan
öskar
を含むテーブルがnimiのASCによって試験順序SELECT * FROM」で(ソートされます。 "):
alan
älan
ölen
oskar
öskar
これは間違っています。私はPOSIXの照合、その後、同じクエリ結果を使用してデータベースを作成する場合:
これは正しいように思える、あなたがミックスにさらにいくつかの名前(õlan、アランを)投げる場合、結果は原因:
alan
oskar
älan
ålan
õlan
ölen
öskar
原因は、エストニア語のアルファベットによると、彼らは次のようになります。
alan
oskar
õlan
älan
ölen
öskar
ålan (cause å is not in estonian alphabet)
私は、PostgreSQL 9.1.9を使用していると私は、照合のサポートが9.1以降で利用可能であることを理解し(http://www.postgresql.org/docs/9.1/interactive/collation.html)。
これは私が使うべきものですか?
SELECT nimi COLLATE "et_EE" FROM test ORDER BY nimi ASC;
は、エラーのエラーで失敗: "UTF8" をコードするための照合 "et_EE.utf8は" 存在しません。何故ですか? この照合ルールなどを作成する必要がありますか? これは、正しい順序で結果が必要な場合、すべてのクエリで照合ルールを指定する方法ですか? 私のロケール-aを示しています:
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
et_EE
et_EE.iso88591
et_EE.utf8
POSIX
zh_CN.utf8
zh_SG.utf8
sudo locale-gen et_EE.UTF-8
[sudo] password for alan:
Generating locales...
et_EE.UTF-8... up-to-date
Generation complete.
sudo locale-gen et_EE
Generating locales...
et_EE.ISO-8859-1... up-to-date
Generation complete.
SQLはまだ
EDIT2ものの失敗:私は、私はそれを考え出したと思います。質問に答えるために1:
アラン
編集私もPostgreSQLで(http://www.postgresql.org/docs/9.1/static/sql-createcollation.html)を照合そのものを作成する必要がありました:
CREATE COLLATION "et_EE" (LOCALE = "et_EE.utf8")
は、だから私はzero323、あなたが話してくれたことを、私はそれらのシェルのロケールファイルを作成する必要が推測して、データベースに照合順序を作成し、Iすべてセットされている。
どのオペレーティングシステムを使用していますか? – zero323
Ubuntu linux v12.04 –
ちなみに、ポルトガル語では 'a'は' a'の後で 'b'の前に来ます。なぜならアクセント付きの文字はアクセントなしで同じ文字の隣に並べられているからです。したがって 'pt-PT'の場合、私は' alan älan oskar ölen öskar'を注文すると期待しています。 – ANeves