Обсуждение: character confusion

Поиск
Список
Период
Сортировка

character confusion

От
Steve Crawford
Дата:
Just noticed something odd with a column of type "char". According to
the docs (and the way my old PG ran), the character data-type is
blank-padded. I'm not seeing that on one of my current machines (8.3.8)
or, perhaps I'm going blind on Friday. Was the definition of char changed?

Here is what I am seeing:

steve=> create temporary table foo (bar char(10));
CREATE TABLE
steve=> \d foo
       Table "pg_temp_2.foo"
 Column |     Type      | Modifiers
--------+---------------+-----------
 bar    | character(10) |

steve=> insert into foo values ('');
INSERT 0 1

steve=> insert into foo values ('asd');
INSERT 0 1

steve=> insert into foo values ('asdfasdf');
INSERT 0 1

steve=> insert into foo values ('asdfasdfas');
INSERT 0 1

steve=> insert into foo values ('asdfasdfasd');
ERROR:  value too long for type character(10)

steve=>=> select bar,length(bar),char_length(bar) from foo;
    bar     | length | char_length
------------+--------+-------------
            |      0 |           0
 asd        |      3 |           3
 asdfasdf   |      8 |           8
 asdfasdfas |     10 |          10
 select bar,length(bar) from foo;


Cheers,
Steve


Re: character confusion

От
Tom Lane
Дата:
Steve Crawford <scrawford@pinpointresearch.com> writes:
> Just noticed something odd with a column of type "char". According to
> the docs (and the way my old PG ran), the character data-type is
> blank-padded. I'm not seeing that on one of my current machines (8.3.8)
> or, perhaps I'm going blind on Friday. Was the definition of char changed?

No; what you're forgetting is that length() doesn't count padding spaces
in char(N) input.  Try octet_length() if you want to be convinced that
the spaces are there.

Was your "old" PG pre-8.0?  We changed that quite a long time ago.

            regards, tom lane