Subject | Re: [firebird-support] difference char and varchar |
---|---|
Author | Ann W. Harrison |
Post date | 2006-07-07T19:14:52Z |
martinknappe wrote:
the full length and the blanks are significant in LIKE comparisons
and appear in concatenations. Varchar fields carry the length of
the specific string entered.
Physically, both varchar and char fields are stored at full length,
blank filled. Varchar fields are preceded by a two byte length.
However, Firebird performs a run length compression on records
before storing them, so the trailing blanks are compressed to
a byte of length and a byte containing a blank for every 127
bytes of padding.
Operationally, this means that char fields are preferable for
strings that are actually fixed length - US social security
numbers, etc., and for very short strings - under 10 characters.
Varchar is preferable for words, names, and other strings that
vary in length (duh!).
and a back version. The back version is normally a "delta" - a series
of offset, length, and data bytes that describe the transformation from
the current version to the previous version. Because Firebird uses
versioning for concurrency control, transaction rollback, and snapshot
stability, it never does an update in place. Ever.
to varchar because of the two extra bytes of length. The advantage
is not having to trim off the trailing blanks.
Regards,
Ann
> hiLogically, the difference is that char fields are blank filled to
> this may sound like a stupid question but what's the difference
> between using char and varchar fields?
the full length and the blanks are significant in LIKE comparisons
and appear in concatenations. Varchar fields carry the length of
the specific string entered.
Physically, both varchar and char fields are stored at full length,
blank filled. Varchar fields are preceded by a two byte length.
However, Firebird performs a run length compression on records
before storing them, so the trailing blanks are compressed to
a byte of length and a byte containing a blank for every 127
bytes of padding.
Operationally, this means that char fields are preferable for
strings that are actually fixed length - US social security
numbers, etc., and for very short strings - under 10 characters.
Varchar is preferable for words, names, and other strings that
vary in length (duh!).
>When Firebird updates a record, it makes a new copy of the whole record
> 1)
> what happens to a varchar field, once the original string held in it
> is updated - does it mean the whole entry and with it the whole db is
> changed?
and a back version. The back version is normally a "delta" - a series
of offset, length, and data bytes that describe the transformation from
the current version to the previous version. Because Firebird uses
versioning for concurrency control, transaction rollback, and snapshot
stability, it never does an update in place. Ever.
> 2)There's no real difference in storage length - a slight disadvantage
> if varchar fields have this advantage of being flexible in size, why
> would anyone use char fields? are they faster to access or something?
to varchar because of the two extra bytes of length. The advantage
is not having to trim off the trailing blanks.
Regards,
Ann