Re: The same result for with SPACE and without SPACE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi David,
I appreciate your response.

I did the analysis.
It sounds me that in realistic scenario, CHAR_10 and VAR_CHAR_10 columns with the same data will fetch the desired results. It sounds me that there is no conflict.

select

                                length( '123'::char(5)),

                                length( '123  '::char(5)),

                                length('123'::varchar),

                                length('123    '::varchar),

                                length(('123  '::char(5))::varchar),

                               '123  '::char(5) =           '123     '::varchar,

                                ('123  '::char(5))::varchar = '123     '::varchar     --- this is FALSE which is fine because VARCHAR is not padding the space.

;


Output:- 

3              3              3              7              3              true       false


 

Thanks,
Sarwar


From: David G. Johnston <david.g.johnston@xxxxxxxxx>
Sent: Thursday, June 15, 2023 2:04 PM
To: M Sarwar <sarwarmd02@xxxxxxxxxxx>
Cc: Scott Ribe <scott_ribe@xxxxxxxxxxxxxxxx>; Wetmore, Matthew (CTR) <Matthew.Wetmore@xxxxxxxxxxxxxxxxxxx>; mahesh <mahesha_dba@xxxxxxxxx>; Mohammed Aslam <hmdaslam97@xxxxxxxxx>; pgsql-admin@xxxxxxxxxxxxxxxxxxxx <pgsql-admin@xxxxxxxxxxxxxxxxxxxx>; Tom Lane <tgl@xxxxxxxxxxxxx>
Subject: Re: The same result for with SPACE and without SPACE
 
On Thu, Jun 15, 2023 at 10:44 AM M Sarwar <sarwarmd02@xxxxxxxxxxx> wrote:
Hello Scott and all,

Here the question comes with respect to CHAR(10) to CHARACTeR VARYING( 10 ) comparison results.
char_10   - type character ( 10 )
var_char_10 - type character varying ( 10)

When I do the comparison between char_10 and var_char_10 columns, I may get the wrong results.
var_char_10 is always trimmed from right.

NO.  varchar is never trimmed in this sense.  Though casting to a varchar(n) will result in truncation of the input value to n characters - regardless of what those characters are.


char_10 has padded data of blank or spaces.
Now I compare char10 and var_char_10 columns, I will get the wrong results because char_10 has padded spaces.

Is that correct or will it ignore whitespaces at the end of char_10 column?


Testing shows that the varchar value gets promoted to char, not the other way around.

postgres=# select '123  '::char(5) = '123    '::varchar;
 ?column?
----------
 t
(1 row)

postgres=# select ('123  '::char(5))::varchar = '123    '::varchar;
 ?column?
----------
 f
(1 row)

No one memorizes char behavior - if you must use it then test your code, and maybe be extra explicit with your casting too.

David J.


[Index of Archives]     [Postgresql Home]     [Postgresql General]     [Postgresql Performance]     [Postgresql PHP]     [Postgresql Jobs]     [PHP Users]     [PHP Databases]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Yosemite Forum]

  Powered by Linux