Why is 'abc' equal to 'abc ' ?
It's the way the SQL standard specifies. Trailing blanks in string fields are not significant in equality matches. Please note that indexes also use equality matches, so your foreign keys and WHERE clauses might give you matches you don't want. If you wish to differentiate between 'abc' and 'abc ' use LIKE. Example:
create table t1 ( i integer, s varchar(20));
insert into t1 values (1, 'a');
insert into t1 values (2, 'a ');
select * from t1 where s = 'a';
select * from t1 where s like 'a';
select * from t1 where s like 'a ';