varchar vs char

Deskin, Bob Bob.Deskin at Cognos.COM
Wed Sep 28 06:14:13 CDT 2005


A space is not a null and vice versa. In many applications, having a space is meaningful. We don't assume that if you specify trailing spaces you don't really want them. I'm at home as I write this, so can't test what you get if you say
 
DEFINE x varchar*10 = "abc"
 
but I would hope that you get a length of 3 with no trailing spaces without having to truncate. However, if you specify trailing spaces, that's what you get. And if you use an expression that might give you trailing spaces, and you don't want them, then you'll have to use the TRUNCATE function.
 
I gather that these columns were not varchar before. Simply switching to varchar doesn't change the data content not the code. However, some things are automatic. When us you item association as in 
 
item_a = item_b
 
in a let or an ITEM statement, and both are varchar, you should get the appropriate length.
 
So when you change datatypes from char to varchar, edit more than the datatype. And when you convert your data, use QTP to change from having spaces to not using TRUNCATE. That should be a one-time conversion.
 
Bob

-----Original Message-----
From: powerh-l-bounces+bob.deskin=cognos.com at lists.sowder.com [mailto:powerh-l-bounces+bob.deskin=cognos.com at lists.sowder.com]On Behalf Of fernando.olmos at hpa.com.au
Sent: September 28, 2005 2:44 AM
To: powerh-l at lists.sowder.com
Subject: varchar vs char



Can someone please explain why this is happening and is it correct? 

Why is it that in PH (and this does not happen in Oracle), a column with a varchar will retain any trailing spaces when data with spaces after the last char is read into it?

ie:     
        define a varchar * 10 = "abc   "        ;has 3 spaces after the 'c' letter 
        define b char*20 = "|" + a + "|" 
        report a b 
        go 

This shows ... 

  A           B 

  abc         |abc   | 

Of course if I change the B define to trunc() the A define it works ... 

        define b char*20 = "|" + trunc(a) + "|" 

It won't make any difference if I change the char*20 to varchar*20 either. 

I don't want to have to use trunc(). We have tons of columns we're migrating over to a new PH environment that are all varchars. I don't want to have to specify trunc() on ever item that populates those columns. Is there a setting in PH that tells the dictionary to "naturally" trunc()?

Thanks again gang. 

Fernando Olmos 
M.I.S. 

HPA
Direct:  03 9217 5411
Mobile: 0410 382 857
Fax:     03 9217 5716 

 <file:///H:/Appdata/Microsoft/Signatures/www.hpa.com.au> www.hpa.com.au 


**********************************************************************

IMPORTANT

The contents of this e-mail and its attachments are confidential and intended

solely for the use of the individual or entity to whom they are addressed.  If

you received this e-mail in error, please notify the HPA Postmaster, postmaster at hpa.com.au,

then delete  the e-mail.

This footnote also confirms that this e-mail message has been swept for the

presence of computer viruses by Ironport. Before opening or using any

attachments, check them for viruses and defects.

Our liability is limited to resupplying any affected attachments.

HPA collects personal information to provide and market our services. For more

information about use, disclosure and access see our Privacy Policy at

www.hpa.com.au

********************************************************************** 
  
       This message may contain privileged and/or confidential information.  If you have received this e-mail in error or are not the intended recipient, you may not use, copy, disseminate or distribute it; do not open any attachments, delete it immediately from your system and notify the sender promptly by e-mail that you have done so.  Thank you. 
        
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.sowder.com/pipermail/powerh-l/attachments/20050928/6f294c2a/attachment.htm


More information about the powerh-l mailing list