INPUT: -- Postgresql 7.4.0 -- ########################################################## DROP TABLE chartest; -- may give error (OK) CREATE TABLE chartest ( charval1 CHAR(10) NOT NULL, charval2 CHAR(10) NOT NULL, varcharval VARCHAR(30) NOT NULL ); INSERT INTO chartest VALUES ('aaa','aaa','aaa'); INSERT INTO chartest VALUES ('aaaaaaaaaaaa','aaa','aaa'); -- should give error SELECT * FROM chartest; SELECT * FROM chartest WHERE charval1=varcharval; SELECT charval1 || 'X' AS res FROM chartest; SELECT CHAR_LENGTH(charval1 || charval2) AS res FROM chartest; SELECT character_length(charval1) + character_length(charval2) AS res FROM chartest; OUTPUT: test=> -- Postgresql 7.4.0 test=> -- ########################################################## test=> DROP TABLE chartest; -- may give error (OK) DROP TABLE test=> CREATE TABLE chartest ( test(> charval1 CHAR(10) NOT NULL, test(> charval2 CHAR(10) NOT NULL, test(> varcharval VARCHAR(30) NOT NULL test(> ); CREATE TABLE test=> INSERT INTO chartest VALUES ('aaa','aaa','aaa'); INSERT 24536 1 test=> INSERT INTO chartest test-> VALUES ('aaaaaaaaaaaa','aaa','aaa'); -- should give error ERROR: value too long for type character(10) test=> SELECT * FROM chartest; charval1 | charval2 | varcharval ------------+------------+------------ aaa | aaa | aaa (1 row) test=> SELECT * FROM chartest WHERE charval1=varcharval; charval1 | charval2 | varcharval ------------+------------+------------ aaa | aaa | aaa (1 row) test=> SELECT charval1 || 'X' AS res FROM chartest; res ------ aaaX (1 row) test=> SELECT CHAR_LENGTH(charval1 || charval2) AS res FROM chartest; res ----- 6 (1 row) test=> SELECT character_length(charval1) + character_length(charval2) test-> AS res test-> FROM chartest; res ----- 20 (1 row)