- 締切済み
文字コードの設定
文字コードの設定する場所って 何箇所かあると思うんですが 教えてもらえないでしょうか psql -l Database | Owner | Encoding -----------+----------+----------- template1 postgres SQL_ASCII php.ini i18.internal_encoding = SJIS 後、ありましたら教えてください 違うマシンで同じ環境を作ろうしているのですが できなくて困っています Redhat6.2J postgres 7.0.2 php3.0.18
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- arata
- ベストアンサー率49% (139/279)
postgresの方の文字コードですが、postgresの内部でデータをどの形式で持つかです。 initdbは、postgresインストール直後の設定時で、1回だけで、データの位置などを指定します。-Eオプションで、createdbでDBを作成するときのデフォルトのデータ形式が指定できます。 createdbは、データベースの作成で、これもDBで1回だけ指定できます。 という訳で、すでにデータが入っているということですから、このパラメータを指定することは出来ませんね。 ただ、rpmで、単純にインストールしたあと、initdbでもcreatedbでも-Eの指定をしていしてないとなると、データ形式がデフォルトのままですから、日本語の処理が出来る状態ではないかもしれません。とは言っても文字として比較する分には、コードの種類さえあっていれば、それほど問題ないかもしれませんが、-Eなどの指定があるのですから、やはり問題がありそうですね。
- arata
- ベストアンサー率49% (139/279)
postgres 7.0以降であれば、 initdb -E EUC_JP でデフォルトをEUC_JPにする。 データベース作成時に指定する createdb -E EUC_JP データベース名 が出きると思いますので、コンパイルしなくても大丈夫だと思いますよ。
- cocky
- ベストアンサー率57% (232/402)
安全かどうかは知りませんが、rpmだとどうしてもコンパイル時に設定すべきオプションをカスタマイズできなくなりますから、今回のようなケースではあまりおすすめしません。 あらかじめ日本語対応済みのrpmならともかく、オリジナルのrpmだと英語環境しか想定していないことはよくありますから、その場合は自力でコンパイルする方が無難です。 自力でコンパイルすると言っても、configureしてmakeしてmake installして起動時のスクリプト書くだけですから、大した手間ではないと思うんですが。
お礼
大変返事が遅れましてすみません 簡単にコンパイルして出来るようでしたら 一度はためしてみたいと思います^^; ありがとう御座いました
- cocky
- ベストアンサー率57% (232/402)
私が言っているのは、initdbではなく、PostgreSQLのコンパイル時の話なんですが。 ./configureはわかりますよね?
補足
そうでしたか^^; RPMパッケージからインストールしましたので そのへんは、わかりせん ソースからコンパイルしたものの方が 安全なのでしょうか
- cocky
- ベストアンサー率57% (232/402)
PostgreSQLのconfigure時に「--enable-multibyte=...」のオプションはつけましたか? PostgreSQLの場合はconfigure時に選択した文字コードしか基本的に使えないので。
補足
早速の回答ありがとうございます initdb等では、なにも指定していません 現象としては postgresから受け取った文字列を そのままinsert出来る環境と できない環境が出来ているという事です 挿入できないというのは EUC-SJIS間の 文字コードに引っかかる文字で 同一ソースであっても環境の違いにより 動作に差異が発生している状態です
補足
ご解答戴きありがとう御座います。 質問に書いてなかったのですが postgres 7.0.2のdataディレクトリそのまま を入れているので initdb 等必要なのか 判りません バージョンが同じだと大丈夫だと思っている 私としては、REDHAT6.2Jを入れて postgres 7.0.2 とPHP3.0.18に rpm で削除/インストしてるつもりなのですが 運営されているサーバーと文字コードが違うため AddSlashes関数を使わないと エラーで落とされているのが現状です