BUG #3413: character string or multibyte character to "char"

Started by Toru SHIMOGAKIalmost 19 years ago3 messagesbugs
Jump to latest
#1Toru SHIMOGAKI
shimogaki.toru@oss.ntt.co.jp

The following bug has been logged online:

Bug reference: 3413
Logged by: Toru SHIMOGAKI
Email address: shimogaki.toru@oss.ntt.co.jp
PostgreSQL version: 8.2.4
Operating system: Red Hat Enterprise Linux AS4
Description: character string or multibyte character to "char"
Details:

When a character string or a multibyte character is inserted to "char"
column, no error occurs. Is this a bug? Should it be checked as "not single
character" in charin(), charrecv() and charout()?

Anyway, I can't find any spec descriptions in the following document;
http://www.postgresql.org/docs/8.2/static/datatype-character.html

Best regards,

----

postgres=# select version();
version
----------------------------------------------------------------------------
-----------------------
PostgreSQL 8.2.4 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6
20060404 (Red Hat 3.4.6-3)
(1 row)

postgres=# create table test(flag "char");
CREATE TABLE
postgres=# \d test
Table "public.test"
Column | Type | Modifiers
--------+--------+-----------
flag | "char" |

postgres=# insert into test values('a');
INSERT 0 1
postgres=# insert into test values('bb');
INSERT 0 1
postgres=# insert into test values('eeeee');
INSERT 0 1
postgres=# insert into test values('あ');
INSERT 0 1
postgres=# select * from test;
flag
------
a
b
e

(4 rows)

#2Toru SHIMOGAKI
shimogaki.toru@oss.ntt.co.jp
In reply to: Toru SHIMOGAKI (#1)
Re: BUG #3413: character string or multibyte character to "char"

This is a sample patch for charin() and charrecv(). I'm not sure for charout();
it can return non-ASCII character...

Toru SHIMOGAKI wrote:

The following bug has been logged online:

Bug reference: 3413
Logged by: Toru SHIMOGAKI
Email address: shimogaki.toru@oss.ntt.co.jp
PostgreSQL version: 8.2.4
Operating system: Red Hat Enterprise Linux AS4
Description: character string or multibyte character to "char"
Details:

When a character string or a multibyte character is inserted to "char"
column, no error occurs. Is this a bug? Should it be checked as "not single
character" in charin(), charrecv() and charout()?

Anyway, I can't find any spec descriptions in the following document;
http://www.postgresql.org/docs/8.2/static/datatype-character.html

Best regards,

----

postgres=# select version();
version
----------------------------------------------------------------------------
-----------------------
PostgreSQL 8.2.4 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6
20060404 (Red Hat 3.4.6-3)
(1 row)

postgres=# create table test(flag "char");
CREATE TABLE
postgres=# \d test
Table "public.test"
Column | Type | Modifiers
--------+--------+-----------
flag | "char" |

postgres=# insert into test values('a');
INSERT 0 1
postgres=# insert into test values('bb');
INSERT 0 1
postgres=# insert into test values('eeeee');
INSERT 0 1
postgres=# insert into test values('あ');
INSERT 0 1
postgres=# select * from test;
flag
------
a
b
e

(4 rows)

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate

--
Toru SHIMOGAKI<shimogaki.toru@oss.ntt.co.jp>
NTT Open Source Software Center

Attachments:

char_length_check.patchtext/plain; name=char_length_check.patchDownload+10-0
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Toru SHIMOGAKI (#1)
Re: BUG #3413: character string or multibyte character to "char"

"Toru SHIMOGAKI" <shimogaki.toru@oss.ntt.co.jp> writes:

When a character string or a multibyte character is inserted to "char"
column, no error occurs. Is this a bug?

That's the historical behavior of the datatype, and given that it's
been like that since Berkeley days, changing it seems ill-advised.
If you want a column that behaves sanely for multibyte data, use
char(1).

regards, tom lane