そのため、PostgreSQLを搭載したDebianサーバーはほとんどありません。歴史的に、これらのサーバーとPostgreSQLはLatin 9文字セットでローカライズされていましたが、当時は問題ありませんでした。現在、ポーランド語、ギリシャ語、中国語などを処理する必要があるため、それを変更することは大きな問題になります。
UTF8データベースを作成しようとすると、次のメッセージが表示されました。
エラー:UTF8のエンコードはロケールfr_FRに一致しません詳細:選択したLC_CTYPE設定にはLATIN9のエンコードが必要です。
私は昔のパルグーグルでいくつかのテーマについて調査しましたが、Debianの更新LANG
、正しい文字セットでのPostgreSQLの再コンパイル、すべてのLC_
システム変数およびその他のあいまいなソリューションの編集など、複雑すぎる手順しか見つかりませんでした。とりあえず、この問題はさておきましょう。
最近、それは再び戻ってきました。ギリシャ人は物を望み、ラテン語9は望んでいません。そして、私がこの問題を再び検討している間に、ある同僚が私のところに来て、「ええ、簡単だ、見て」と言いました。
彼は何も編集せず、手品をしませんでした。彼はこのSQLクエリを作成しました。
CREATE DATABASE my_utf8_db
WITH ENCODING='UTF8'
OWNER=admin
TEMPLATE=template0
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT=-1
TABLESPACE=pg_default;
そして、それはうまくいきました。
私は実際には知りLC_CTYPE='C'
ませんでしたが、これがGoogleの最初のソリューションやStack Overflowでも使用されていないことに驚きました。私は周りを見回しましたが、PostgreSQLのドキュメントに言及しているだけです。
LC_CTYPEがCまたはPOSIXの場合、任意の文字セットが許可されますが、LC_CTYPEの他の設定では、正しく機能する文字セットは1つだけです。LC_CTYPE設定はinitdbによって凍結されるため、クラスターの異なるデータベースで異なるエンコードを使用するための明らかな柔軟性は、CまたはPOSIXロケールを選択する場合を除いて、実際よりも理論的です(したがって、実際のロケール認識を無効にします)。
だから、これはあまりにも簡単で完璧すぎると思いました。マイナス面は何ですか?そして、私はまだ答えを見つけるのに苦労しています。だからここに投稿します:
tl; dr:特定のローカライズで使用LC_CTYPE='C'
することのマイナス面は何ですか?そうするのは悪いですか?私は何を壊すことを期待すべきですか?