On 10/03/2014 03:59 PM, Tom Lane wrote:
> Adrian Klaver <adrian.klaver@aklaver.com> writes:
>>> page 28:
>>>
>>> Unlike many
>>> databases, char(n) is NOT stored as afixed-sizedfield
>>> in Postgres. It is treated exactly the sameas
>>> varchar(n)except for being padded
>
>> Which directly contradicts the information on page 27:
>
> This info is probably not as well worded as it could be, but it's not
> really wrong. The key point is that char(N) is blank-padded (thereby
> wasting space) to be N *characters*, but that is not necessarily N
> *bytes*, because of possible multi-byte characters. Therefore the engine
> has to treat it as a variable-length datatype.
Well that is a distinction I had missed, thanks for the heads up. So the
bottom line is char(N) is variable length, but for values that do not
reach length N will require more storage space then varchar(n).
>
> I believe in some some other DBMSes, char(N) means N *bytes* and is
> treated as a fixed-size datatype. Dunno what they do with multibyte
> encodings.
>
> regards, tom lane
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com