Unix Technical Forum

Re: [GENERAL] 'a' == 'a '

This is a discussion on Re: [GENERAL] 'a' == 'a ' within the pgsql Hackers forums, part of the PostgreSQL category; --> > -----Original Message----- > From: pgsql-hackers-owner@postgresql.org [mailto gsql-hackers- > owner@postgresql.org ] On Behalf Of Greg Stark > Sent: Wednesday, ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Hackers

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-11-2008, 07:20 AM
Dann Corbit
 
Posts: n/a
Default Re: [GENERAL] 'a' == 'a '

> -----Original Message-----
> From: pgsql-hackers-owner@postgresql.org [mailtogsql-hackers-
> owner@postgresql.org] On Behalf Of Greg Stark
> Sent: Wednesday, October 19, 2005 11:17 PM
> To: Tom Lane
> Cc: Chris Travers; josh@agliodbs.com; pgsql-hackers@postgresql.org;

Dann
> Corbit; Stephan Szabo; Terry Fielder; Tino Wildenhain; Marc G.

Fournier;
> Richard_D_Levine@raytheon.com; pgsql-general@postgresql.org
> Subject: Re: [GENERAL] [HACKERS] 'a' == 'a '
>
> Tom Lane <tgl@sss.pgh.pa.us> writes:
>
> > Chris Travers <chris@travelamericas.com> writes:
> > > If I understand the spec correctly, it seems to indicate that this

is
> > > specific to the locale/character set.

> >
> > The spec associates padding behavior with collations, which per spec

are
> > separate from the datatypes --- that is, you should be able to able

to
> > specify a collation for each string-type table column (whether

char(N)
> > or varchar(N)) and even for each literal string constant. We do not
> > currently have that capability, and accordingly fall back to binding
> > PAD SPACE behavior to char(N) and NO PAD behavior to varchar(N).
> >
> > AFAICS this choice is allowed by the spec since the default

collation is
> > implementation-defined.

>
> Does it even make sense for char(N) to not be space padded? I had the
> impression char(N) was always N characters long, not more or less. I

can't
> picture any other character being used for padding, then you would

need a
> more
> flexible rtrim function.
>
> And I can understand the collation order determining whether 'a' and

'a '
> compare equal. But surely if you store 'a' in a varchar(N) you have to

get
> 'a'
> back out, not some other string! Does the spec really allow varchar to
> actually be padded and not just compare ignoring trailing space?
>
>
> (I can't believe anyone really wants varchar to be space padded. Space
> padding
> always seemed like a legacy feature for databases with fixed record

length
> data types. Why would anyone want a string data type that can't

represent
> all
> strings?)


Let me make something clear:
When we are talking about padding here it is only in the context of a
comparison operator and NOT having anything to do with storage.

Given two strings of different in a comparison, most database systems
(by default) will blank pad the shorter string so that they are the same
length before performing the comparison.

Hence, you will see that 'Danniel' = 'Danniel ' is true in most cases.

Now, this really does not have any connection with storage or varchar or
bpchar or char or text or anything like that.

It is only the action to be taken when a comparison operation is
performed.

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-11-2008, 07:20 AM
Chris Travers
 
Posts: n/a
Default Re: [GENERAL] 'a' == 'a '

Dann Corbit wrote:

>Let me make something clear:
>When we are talking about padding here it is only in the context of a
>comparison operator and NOT having anything to do with storage.
>
>

IIrc, varchar and bpchar are stored in a similar way, but are presented
differently when retrieved. I.e. storage is separate from presentation
in this case. I.e. the padding in bpchar occurs when it is presented
and stripped when it is stored.

Again, I am happy "solving" this simply by documenting it since any
questions of interpretation and implimentation of the standard would be
answered. So far what I (and I am sure others) have not heard is a
strong case for changing the behavior, given that it is in line with a
reasonable interpretation of the standards.

>Given two strings of different in a comparison, most database systems
>(by default) will blank pad the shorter string so that they are the same
>length before performing the comparison.
>
>

Understood, but what gain do you have in a case like this that might
justify the effort that would go into making it, say, an initdb option?
How often does this behavior cause problems?

Best Wishes,
Chris Travers
Metatron Technology Consulting

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 06:54 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com