On Thu, 20 Oct 2005, Doug Quale wrote:
"Guy Rouillier" <guyr@xxxxxxxxxxx> writes:
Doug Quale wrote:
# select 'a'::char(8) = 'a '::char(8);
?column?
----------
t
(1 row)
Trailing blanks aren't significant in fixed-length strings, so the
question is whether Postgresql treats comparison of varchars right.
This result is being misinterpreted.
select length('a'::char(8)) ==> 1
select length('a '::char(8)) ==> 1
So it isn't that the two different strings are comparing equal. The
process of casting them to char(8) is trimming the blanks, so by the
time they become fixed length strings, they are indeed equal.
Huh??? What version of PG are you using? On 7.4.9,
test=# select length('a'::char(8));
length
--------
8
(1 row)
test=# select length('a '::char(8));
length
--------
8
(1 row)
The truncation you describe would simply be wrong.
ams=# select length('a '::char(8));
length
--------
1
(1 row)
ams=# select version();
version
----------------------------------------------------------------------
PostgreSQL 8.0.2 on i386-portbld-freebsd4.11, compiled by GCC 2.95.4
(1 row)
ams=#
----
Marc G. Fournier Hub.Org Networking Services (http://www.hub.org)
Email: scrappy@xxxxxxx Yahoo!: yscrappy ICQ: 7615664
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend