BUG #3413: character string or multibyte character to "char"
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)
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.htmlBest 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
--
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
"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