character varying == text?
Just something I was curious about - is there any
difference at all between "character varying" (in the
SQL spec) without a length specified and "text" (not
in the SQL spec)?
Thanks,
CSN
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
CSN <cool_screen_name90001@yahoo.com> writes:
Just something I was curious about - is there any
difference at all between "character varying" (in the
SQL spec) without a length specified and "text" (not
in the SQL spec)?
The SQL standard doesn't allow "character varying" without a length spec.
But yeah, in Postgres they're essentially the same thing.
regards, tom lane
I thought a char field was supposed to return a padded string, and varchar
was supposed to return a non-padded string?
I just checked though:
create table test (
stuff char(10)
);
insert into test values ('foo');
select stuff || 'lemon' from test;
This returns 'foolemon', not 'foo lemon' as I would have expected.
Alex Turner
NetEconomist
Show quoted text
On 9/15/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:
CSN <cool_screen_name90001@yahoo.com> writes:
Just something I was curious about - is there any
difference at all between "character varying" (in the
SQL spec) without a length specified and "text" (not
in the SQL spec)?The SQL standard doesn't allow "character varying" without a length spec.
But yeah, in Postgres they're essentially the same thing.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match
On Mon, 2005-09-19 at 12:54, Alex Turner wrote:
I thought a char field was supposed to return a padded string, and
varchar was supposed to return a non-padded string?I just checked though:
create table test (
stuff char(10)
);insert into test values ('foo');
select stuff || 'lemon' from test;
This returns 'foolemon', not 'foo lemon' as I would have
expected.Alex Turner
NetEconomistOn 9/15/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:
CSN <cool_screen_name90001@yahoo.com> writes:Just something I was curious about - is there any
difference at all between "character varying" (in the
SQL spec) without a length specified and "text" (not
in the SQL spec)?The SQL standard doesn't allow "character varying" without a
length spec.But yeah, in Postgres they're essentially the same thing.
regards, tom lane
---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your
desire to
choose an index scan if your joining column's datatypes
do not
match
That's because || is a text operator, not a char operator here. So,
what's really happening is:
select cast(charfield as text)||cast(textfield as text)
Scott Marlowe wrote:
On Mon, 2005-09-19 at 12:54, Alex Turner wrote:
I thought a char field was supposed to return a padded string, and
varchar was supposed to return a non-padded string?I just checked though:
create table test (
stuff char(10)
);insert into test values ('foo');
select stuff || 'lemon' from test;
This returns 'foolemon', not 'foo lemon' as I would have
expected.Alex Turner
NetEconomistOn 9/15/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:
CSN <cool_screen_name90001@yahoo.com> writes:Just something I was curious about - is there any
difference at all between "character varying" (in the
SQL spec) without a length specified and "text" (not
in the SQL spec)?The SQL standard doesn't allow "character varying" without a
length spec.But yeah, in Postgres they're essentially the same thing.
regards, tom lane
---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your
desire to choose an index scan if your joining
column's datatypes do not matchThat's because || is a text operator, not a char operator
here. So, what's really happening is:select cast(charfield as text)||cast(textfield as text)
---------------------------(end of
broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
is this the expected result? i.e. in the past was the result incorrect?
or is there a configuration param that controls this?
test=# select stuff || 'lemon' from test1;
?column?
-----------------
foo lemon
(1 row)
test=# \d test1
Table "test1"
Column | Type | Modifiers
--------+---------------+-----------
stuff | character(10) |
test=# select version();
version
-------------------------------------------------------------
PostgreSQL 7.2.3 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)
----
test=# select stuff || 'lemon' from test;
?column?
----------
foolemon
(1 row)
test=# \d test
Table "public.test"
Column | Type | Modifiers
--------+---------------+-----------
stuff | character(10) |
test=# select version();
version
------------------------------------------------------------------------
--------
----------
PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.4.2 (mingw
-special)
(1 row)
reid
Import Notes
Resolved by subject fallback
"Reid Thompson" <Reid.Thompson@ateb.com> writes:
is this the expected result? i.e. in the past was the result incorrect?
or is there a configuration param that controls this?
Yes, yes, and no. You could change the pg_cast entry for char-to-text
if you wanted, but then you would run into the other unpleasant cases
that prompted us to change it in the first place.
regards, tom lane
On Mon, 2005-09-19 at 15:38, Tom Lane wrote:
"Reid Thompson" <Reid.Thompson@ateb.com> writes:
is this the expected result? i.e. in the past was the result incorrect?
or is there a configuration param that controls this?Yes, yes, and no. You could change the pg_cast entry for char-to-text
if you wanted, but then you would run into the other unpleasant cases
that prompted us to change it in the first place.
I seem to recall this is how the SQL spec says it should happen. Is
that my imagination, or did that subject come up before?