Thread: Fixed chars

Fixed chars

From
Enrico Pirozzi
Date:
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



Re: Fixed chars

From
Andreas Kretschmer
Date:

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



Re: Fixed chars

From
Enrico Pirozzi
Date:
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