From: Alex Turner <armtuk@gmail.com>
To: Marc G. Fournier <scrappy@postgresql.org>
Cc: Doug Quale <quale1@charter.net>
Cc: pgsql-general@postgresql.org
Subject: Re: [pgsql-advocacy] Oracle buys Innobase
Date: Fri, 21 Oct 2005 10:16:08 -0400
Message-ID: <33c6269f0510210716x474dae2ah3861d32d8db01602@mail.gmail.com> (raw)
In-Reply-To: <20051020214518.Q1006@ganymede.hub.org>
References: <CC1CF380F4D70844B01D45982E671B239E8BEC@mtxexch01.add0.masergy.com>
<878xwokk4d.fsf@charter.net>
<20051020214518.Q1006@ganymede.hub.org>
It appears that casting to a char() causes spaces to be stripped (ignored)
from the string:
mls=# select length('123 '::char(8));
length
--------
3
(1 row)
mls=# select length('123 '::char(8)::varchar(8));
length
--------
3
(1 row)
but:
mls=# select length('123 '::varchar(8));
length
--------
6
(1 row)
I'm not sure about anyone else, but I would personaly consider that a bug?
Should the length function return the correct length of a fixed length
string, or the length of significant characters? What does the SQL standard
say on this one? I googled it a bit, but didn't come up with much.
Alex Turner
NetEconomist
On 10/20/05, Marc G. Fournier <scrappy@postgresql.org> wrote:
>
> On Thu, 20 Oct 2005, Doug Quale wrote:
>
> > "Guy Rouillier" <guyr@masergy.com> 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@hub.org Yahoo!: yscrappy ICQ: 7615664
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend
>
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: armtuk@gmail.com, scrappy@postgresql.org, quale1@charter.net, pgsql-general@postgresql.org
Subject: Re: [pgsql-advocacy] Oracle buys Innobase
In-Reply-To: <33c6269f0510210716x474dae2ah3861d32d8db01602@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox