Fixed chars

Started by Enrico Pirozziabout 8 years ago3 messagesgeneral
Jump to latest
#1Enrico Pirozzi
e.pirozzi@nbsgroup.it

Hi , I've seen this strange thing.

sitedb=# create table test_tb(codice char(7));
CREATE TABLE
sitedb=# insert into test_tb values('pippo');
INSERT 0 1
sitedb=# select codice || 'a'::char(1),length(codice) from test_tb
?column? | length
----------+--------
pippoa | 5
(1 row)

On the official documentation

|character(/|n|/)|,|char(/|n|/)| fixed-length, blank padded

https://www.postgresql.org/docs/10/static/datatype-character.html

Can anyone help me?

Enrico

--
Enrico Pirozzi
NBS Group S.r.l.
via Val Tiberina 23/A
63074, San Benedetto del Tronto (AP)
Tel. 0735-7626201

#2Andreas Kretschmer
andreas@a-kretschmer.de
In reply to: Enrico Pirozzi (#1)
Re: Fixed chars

Am 28.03.2018 um 11:11 schrieb Enrico Pirozzi:

Hi , I've seen this strange thing.

sitedb=# create table test_tb(codice char(7));
CREATE TABLE
sitedb=# insert into test_tb values('pippo');
INSERT 0 1
sitedb=# select codice || 'a'::char(1),length(codice) from test_tb
ᅵ?column? | length
----------+--------
ᅵpippoaᅵᅵ |ᅵᅵᅵᅵᅵ 5
(1 row)

where is the problem? length() returns the number of chars in string,
and the string in codice is 5 chars long.

On the official documentation

|character(/|n|/)|,|char(/|n|/)|ᅵᅵᅵᅵ fixed-length, blank padded

https://www.postgresql.org/docs/10/static/datatype-character.html

test=*# select length('12345'::char(10)), pg_column_size('12345'::char(10));
ᅵlength | pg_column_size
--------+----------------
ᅵᅵᅵᅵᅵ 5 |ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ 14
(1 Zeile)

helps that?

Regards, Andreas

--
2ndQuadrant - The PostgreSQL Support Company.
www.2ndQuadrant.com

#3Enrico Pirozzi
e.pirozzi@nbsgroup.it
In reply to: Andreas Kretschmer (#2)
Re: Fixed chars

Resolved...my missing

Thanks

Enrico

https://www.postgresql.org/docs/10/static/datatype-character.html

"Values of type|character|are physically padded with spaces to the
specified width/|n|/, and are stored and displayed that way. However,
trailing spaces are treated as semantically insignificant and
disregarded when comparing two values of type|character|. In collations
where whitespace is significant, this behavior can produce unexpected
results; for example|SELECT 'a '::CHAR(2) collate "C" <
E'a\n'::CHAR(2)|returns true, even though|C|locale would consider a
space to be greater than a newline. Trailing spaces are removed when
converting a|character|value to one of the other string types. Note that
trailing spaces/are/semantically significant in|character
varying|and|text|values, and when using pattern matching, that
is|LIKE|and regular expressions."

Il 28/03/2018 11:32, Andreas Kretschmer ha scritto:

Am 28.03.2018 um 11:11 schrieb Enrico Pirozzi:

Hi , I've seen this strange thing.

sitedb=# create table test_tb(codice char(7));
CREATE TABLE
sitedb=# insert into test_tb values('pippo');
INSERT 0 1
sitedb=# select codice || 'a'::char(1),length(codice) from test_tb
?column? | length
----------+--------
pippoa | 5
(1 row)

where is the problem? length() returns the number of chars in string,
and the string in codice is 5 chars long.

On the official documentation

|character(/|n|/)|,|char(/|n|/)| fixed-length, blank padded

https://www.postgresql.org/docs/10/static/datatype-character.html

test=*# select length('12345'::char(10)),
pg_column_size('12345'::char(10));
length | pg_column_size
--------+----------------
5 | 14
(1 Zeile)

helps that?

Regards, Andreas

--
Enrico Pirozzi
NBS Group S.r.l.
via Val Tiberina 23/A
63074, San Benedetto del Tronto (AP)
Tel. 0735-7626201