Sorry, but I still do not get it: - char type adds padding up to its length - select length(charcol), char_length(charcoal)
both yield 1 - how can the length of a char(10) be different than 10 since is right padded? - I am pretty sure that Oracle/MS-SQL/Sybase would say that length is 10...
Bug reference: 18051 Logged by: Nicolas Gouteux Email address: nicolas.gouteux@sonarsource.com PostgreSQL version: 13.7 Operating system: Linux Description:
create table if not exists ngx_char ( charcol char(10) not null, varcharcol varchar(10) not null ); truncate table ngx_char; insert into ngx_char (charcol, varcharcol) values ('A', 'A'); insert into ngx_char (charcol, varcharcol) values ('A ', 'A '); select charcol || 'B', varcharcol || 'C' from ngx_char; select * from ngx_char where charcol = varcharcol;
Output:
?column?,?column? AB,AC AB,A C
This is very strange! Is it me?
This is working as designed and documented. The concatenation to text removes the insignificant white space in char. There is no manipulation of content for varchar.
Just don’t use char. There is no good reason to deal with its implicit behaviors.