[pgsql-jp: 35547] SQLの結果での空白の扱い
shinmori toshiaki
shinmori @ cbnet.co.jp
2005年 6月 22日 (水) 12:52:02 JST
新守です。
このたびPostgreSQLの7.0/7.1から8.0.3への移行を行っております。
移行自体はスムーズに済んだのですが、データの確認を行っている
と7.0/7.1とは違いSQL結果で後ろの空白が詰まった状態(rtrimを
使用したのと同じ状態)になる場合がありました。
テストに使用したテーブルとデータ
create table aaa(bbb char(10));
insert into aaa values('123 '); -- 6桁後方空白
insert into aaa values(' 456 '); -- 9桁前後ろに空白
内容確認のSQLと結果
(桁数がわかりやすいように|を前後に付けています)
select '|'||bbb||'|' from aaa;
?column?
----------
|123|
| 456|
(2 rows)
PHP5で検証しましたが、前後に'|'を連結した場合はrtrim状態
になり、項目だけ(select bbb from aaa)の場合は、空白有りの
状態で取得できました。
実行したPHP
<?
// PHP3からの移行なので古い書き方です
$con = pg_connect("host=hogehoge dbname=hogehoge");
//
$w_sql = "select '|'||bbb||'|' from aaa";
$result = pg_exec($w_sql);
if ($result == false) {
printf("sql1(%s) false\n", $w_sql);
} else {
printf("sql1(%s) result('%s')\n", $w_sql, pg_result($result, 0, 0));
printf("sql1(%s) result('%s')\n", $w_sql, pg_result($result, 1, 0));
}
//
$w_sql = "select bbb from aaa";
$result = pg_exec($w_sql);
if ($result == false) {
printf("sql2(%s) false\n", $w_sql);
} else {
printf("sql2(%s) result('%s')\n", $w_sql, pg_result($result, 0, 0));
printf("sql2(%s) result('%s')\n", $w_sql, pg_result($result, 1, 0));
}
pg_close($con);
?>
PHPの結果
sql1(select '|'||bbb||'|' from aaa)
result('|123|')
result('| 456|')
sql2(select bbb from aaa)
result('123 ')
result(' 456 ')
7.0から8.0.2までの更新履歴などを確認しましたが該当するもの
を見つけられませんでした。postgresql.confの設定によって変わ
るのか、そもそも仕様なのか教えていただけないでしょうか?
OSはLinux、エンコードはEUC_JP、Postgreは8.0.3を使用して
おります。
同じ調査を7.4.6(dbを作成しpsqlからのみ検証)でも行いましたが
同様な現象を確認しました。
頭の中が7.1ぐらいで止まっているので愚問でしたら申し訳ありま
せんが宜しくお願いします。
+----+----+----+----+----+----+----+
(株)コンピューター・ビジネス 新守
e-mail: shinmori @ cbnet.co.jp
+----+----+----+----+----+----+----+
pgsql-jp メーリングリストの案内