Thread

  1. Re: [PATCHES] character type value is not padded with spaces

    Tatsuo Ishii <t-ishii@sra.co.jp> — 2005-05-23T23:25:58Z

    I think you need to test with 5 characters, not 3.
    --
    Tatsuo Ishii
    
    > Ahemm,...
    > 
    > UNICODE DB:
    > 
    > create table t (a char(10));
    > set client_encoding = iso88591;
    > insert into t VALUES ('æøå');
    > 
    > select a, octet_length(a),length(a) from t;
    >      a      | octet_length | length
    > ------------+--------------+--------
    >  æøå        |           13 |      3
    > (1 row)
    > 
    > This is with 8.0.2.
    > 
    > Just FYI.
    > 
    > ... John
    > 
    > > -----Original Message-----
    > > From: pgsql-patches-owner@postgresql.org 
    > > [mailto:pgsql-patches-owner@postgresql.org] On Behalf Of Tatsuo Ishii
    > > Sent: Tuesday, May 24, 2005 8:52 AM
    > > To: y-asaba@sra.co.jp
    > > Cc: pgsql-patches@postgresql.org; pgsql-hackers@postgresql.org
    > > Subject: Re: [PATCHES] character type value is not padded with spaces
    > > 
    > > Hackers,
    > > 
    > > The problem he found is not only existing in Japanese 
    > > characters but also in any multibyte encodings including 
    > > UTF-8. For me the patch looks good and I will commit it to 
    > > 7.3, 7.4, 8.0 stables and current if there's no objection.
    > > --
    > > Tatsuo Ishii
    > > 
    > > > Character type value including multibyte characters is not 
    > > padded with 
    > > > spaces. It reproduces at 7.3.x, 7.4.x and 8.0.x.
    > > > 
    > > >    create table t (a char(10));
    > > >    insert into t values ('XXXXX'); -- X is 2byte character.
    > > > 
    > > > I expect that 'XXXXX     ' is inserted. But 'XXXXX' is inserted.
    > > > 
    > > >    select a, octed_length(a) from t;
    > > > 
    > > >       a   | octet_length 
    > > >    -------+--------------
    > > >     XXXXX |           10
    > > > 
    > > > If padded with spaces, octet_length(a) is 15. This problem 
    > > is caused 
    > > > that string length is calculated by byte length(VARSIZE) in 
    > > > exprTypmod().
    > > > 
    > > > I attache the patch for this problem.
    > > > 
    > > > Regards,
    > > > 
    > > > --
    > > > Yoshiyuki Asaba
    > > > y-asaba@sra.co.jp
    > > 
    > > ---------------------------(end of 
    > > broadcast)---------------------------
    > > TIP 2: you can get off all lists at once with the unregister command
    > >     (send "unregister YourEmailAddressHere" to 
    > > majordomo@postgresql.org)
    > > 
    > > 
    >