- - PR -
PostgreSQL 日本語データのグループ化
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-03 11:55
PostgreSQL+PHPで、
"select A from T group by A;" で、Aに日本語データが入っていた場合に、 文字数でグループ化されてしまいます。 (PostgreSQL7.3.2-3 PHP4.2.2) 環境によってはうまく動きますので、 PostgreSQLのバージョンや設定の違いかと思うのですが、 何か解決のヒントがあればお教えいただけないでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-07-03 19:27
具体的にどのような結果がでるのか教えてもらえませんか? 出たままをそのままペーストしてもらえるのがベストですが、 差し障りがあるようならば適当な文字に置き換えてもらっても かまいません。 どのようなデータが入っていて。 どのような操作をおこなって。 どのような結果がでた。(若しくはでなかった) そして、期待していたのはこのような結果である。 が、わからないと解決までに余計なやり取り、時間がかかるかと おもいます。
うまくいくと言う環境をおしえてもらえませんか? | ||||||||
|
投稿日時: 2005-07-04 13:24
返信ありがとうございます。
"select A from T;"の結果、 "あいう" "aaa" "あ" "かきくけ" "さささ" "bbb" "あいう" と表示されたとします。 この状態で "select A from T group by A;" とすると、 (PostgreSQL7.4 PHP4.3.11)の環境においては、 "あいう" "aaa" "あ" "かきくけ" "さささ" "bbb" というように、"あいう"が正常にグループ化されているのですが、 (PostgreSQL7.3.2-3 PHP4.2.2)の環境においては、 "あいう" "aaa" "あ" "かきくけ" "bbb" と表示されます。 count(*)で件数を見てみますと、 "あいう"が3件となりますので、 日本語データだけがその文字数で グループ化されているのではないかと思われます。 おかしな現象で、困惑しております。 何か単純なミスかとも思うのですが・・・ どうかご教授よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-07-05 04:26
確認です。上記結果は、PHP上に表示しておこなってますか?
それとも、Postgres に pg_ctl 等で接続して確認していますか? もしも後者ならば、Postgres に対して SQLを実行し、同じ結果に なるのかどうか、問題点がどこにあるのか、(PHP なのか、Postgres なのか) を切り分けた方がいいとおもいます。 もしも前者であり、構築の期限があるようでしたら、正常に動作する 環境へ切り替える判断をされた方が宜しいかと。 もちろん、環境をかえるリスクはきちんと計った上で、であることは 言うまでもない事ですが。 | ||||||||
|
投稿日時: 2005-07-05 09:26
おはようございます。
telnet等使えない環境ですので、 (PostgreSQL7.4 PHP4.3.11)も (PostgreSQL7.3.2-3 PHP4.2.2)においても 同じPHPで検証しています。 PHPに関しましては、 $sql = "select A from T;"; $rs = pg_exec ($con,$sql); $num = pg_numrows($rs); for($count=0;$count<$num;$count++){ $array = pg_fetch_array($rs,$count); print_r($array); echo "<br><br>"; } $sql = "select A from T group by A;"; $rs = pg_exec ($con,$sql); $num = pg_numrows($rs); for($count=0;$count<$num;$count++){ $array = pg_fetch_array($rs,$count); print_r($array); echo "<br><br>"; } といった単純なもので確認しておりますので、 PHPのバージョンの違いとは考えにくいかと思います。 残念ながら環境を変更することは できませんので、 なんとか、日本語データでのグループ化をコードで 行えるよう仕様変更の方向で検討します。 また何かヒントがございましたら、 よろしくお願いいたします。ありがとうございました。 | ||||||||
|
投稿日時: 2005-07-05 16:06
PostgreSQLでこういう日本語の比較やソートの問題が起きる場合は、
大抵initdb時に --no-locale オプションを付け忘れていることが原因です。 以下のページなどを参考に設定を確認してみてください。 http://ml.postgresql.jp/pipermail/pgsql-jp/2004-July/017119.html | ||||||||
|
投稿日時: 2005-07-07 16:32
貴重なアドバイスありがとうございます。
さっそくロケール関連で調べましたところ、 同様の現象がWEB上でも議論されておりました。 レンタルサーバーのため、 自分では設定できませんので、 業者のほうに問い合わせてみます。 大変助かりました。ありがとうございました。 |
1