そこで、本日は、FreeBSDで
KDE UTF-8にパッチを適用するという一般的な問題に答えようとします。
ある瞬間、ベータ版を準備するためにデータベースがテストサーバーから本番環境に転送され、PostgreSQLのUTF-8行の問題について頭を痛めました。 具体的には、PostgreSQLが「Gopher」状態に基づくgopherの位置をSELECT上位クエリに発行することを完全に嫌がっています。 バグを検索した結果、私はショックを受けました。なぜなら、最新のOSからこのような完全に幼稚な失態を期待していなかったからです!
Unicode文字列を操作するためにほつれ口のポートから組み立てられたPostgreSQLは、システムLC_COLLATEを使用します。 レーキの内容を理解するために、必要なコマンドは1つだけです。
$ ls -l /usr/share/locale/ru_RU.UTF-8/LC_COLLATE
lrwxr-xr-x 1ルートホイール28 12月3日23:30 /usr/share/locale/ru_RU.UTF-8/
LC_COLLATE-> ../la_LN.US-ASCII/LC_COLLATE
ショックから離れて、私はこの不名誉の治療のためのレシピを探すためにグーグルに登った。 私はあなたにそれを提供します:
- まず、FreeBSDで
KDE UTF-8にパッチを適用する必要があります( ソリューションの作者に感謝します )。
wget http://blog.lexa.ru/files/ru_RU.UTF-8.LC_COLLATE.tar.gz
tar xzvf ru_RU.UTF-8.LC_COLLATE.tar.gz
cd ru_RU.UTF-8.LC_COLLATE
freebsdsortを作成するか、ユニバーサルにします
す
インストールする
- しかし、問題はそこで終わりませんでした。 ru_RU.UTF-8以外のエンコーディングで初期化されたPostgreSQLがある場合、このパッチでは不十分です。 データベースを再初期化する必要があります(もちろん、それは私を幸せにしませんでした)。
- ベース(pg_dumpまたはpg_dumpall)をダンプします。
- PostgresSQLを停止します。
/usr/local/etc/rc.d/postgresql stop
- /etc/login.confファイルに次の行を追加します。
postgres:\
:lang = ru_RU.UTF-8:\
:setenv = LC_COLLATE = C:\
:tc =デフォルト:
- 適切な初期化のために/etc/rc.confファイルにフラグを追加します。
postgresql_initdb_flags = "-locale = ru_RU.UTF-8"
- ベースを初期化します。
/usr/local/etc/rc.d/postgresql initdb
- ベースを埋めます。 出来上がり!
そして、さらにいくつかのコメント...
- ボタンのアコーディオンはかなり古いようです。この問題に関するチケットが最近2歳になったからです:)。 また、最初の参照は一般的に2005年に遡ります。
- 速度:(残念ながら、このパッチを使用したUTF-8文字列のソート速度は、例えばru_RU.KOI8-Rロケールでのソートよりも10倍遅く、Cでのほぼ30倍遅くなります。
個人ブログからのPS Crosspost。