表8.4「文字型」はPostgreSQLで使用可能な汎用文字型を示したものです。SQLは2つの主要な文字データ型を定義しています。varying(n)とcharacter(n)です。ここでnは正の整数です。これらのデータ型は2つともn文字長(バイト数ではなく)までの文字列を保存できます。上限を越えた文字列をこれらの型の列に保存しようとするとエラーになります。上限を超えた部分にある文字がすべて空白の場合はエラーにはならず、文字列の最大長にまで切り詰められます。(この一風変わった例外は標準SQLで要求されています。varyingの値は単にその短い文字列で保存されます。varying(n)またはcharacter(n)にキャストした場合、指定長を超えるとエラーなしでn文字まで切り詰められます。(これもまた標準SQLの仕様です。varying(n)の別名です。長さ指定がないcharacterはcharacter(1)と同じです。varyingが長さ指定なしで使われた時は、いかなる長さの文字列でも受け付けます。後者はPostgreSQLの拡張です。PostgreSQLは、いかなる長さの文字列でも格納できるtextをサポートします。text型は標準SQLにはありませんが、多くの他のSQLデータベース管理システムも同様にサポートしています。character型の値は、指定長nになるまで物理的に空白で埋められ、そのまま格納、表示されます。最後の空白は、重要ではないものとして扱われ、2つのcharacter型の値を比べる際には無視されます。空白が重要な照合順序では、この挙動は予期しない結果を返す可能性があります。E'a\n'::CHAR(2)はCロケールでスペースが改行よりも大きいにも関わらず真を返します。character値を他の文字列型に変換する際は、文字列の終わりの空白は除去されます。varying型とtext型の値の中や、パターンマッチを行なう際、すなわちLIKEや正規表現では、最後の空白は意味的に重要なものですので、注意してください。短い文字列(126バイトまで)の保存には、実際の文字列に1バイト加えたサイズが必要です。characterでは空白埋め込み分もこれに含まれます。長い文字列では1バイトではなく4バイトのオーバーヘッドになります。長い文字列はシステムにより自動的に圧縮されますので、ディスク上の物理的必要容量サイズはより小さくなるかもしれません。非常に長い値はより短い列の値への高速アクセスに干渉しないように、バックグラウンドテーブルに格納されます。いずれの場合にあっても保存できる最長の文字列は約1ギガバイトです。(データ型宣言に使われるnに許される最大値はこれより小さいものです。マルチバイト文字符号化方式においては文字数とバイト数はまったく異なっているため、この値の変更は便利ではありません。varyingを使用してください。)ヒント空白で埋められる型を使用した場合の保存領域の増加、および、長さ制限付きの列に格納する際に長さを検査するためにいくつか余計なCPUサイクルが加わる点を別にして、これら3つの型の間で性能に関する差異はありません。他の一部のデータベースシステムではcharacter(n)には性能的な優位性がありますが、PostgreSQLではこうした利点はありません。実際には、格納の際に追加のコストがあったり、ソートが遅かったりするため、character(n)は3つの中でもっとも低速です。varyingを使うのがお薦めです。演算子と関数については9章関数と演算子を参照してください。データベースの文字セットは、テキストの値を格納する時に使用される文字セットを決定します。文字セットサポートを参照してください。文字列関数と演算子で説明されています。PostgreSQLには、表8.5「特別な文字データ型」に示すように、この他2つの固定長文字型があります。name型は内部のシステムカタログ内の識別子の格納のためにのみ存在するもので、一般ユーザによって使用されることを意図していません。現在長さは64バイト(63バイトの利用可能文字と終止文字)と定義されていますが、CソースコードにあるNAMEDATALEN定数を使って参照される必要があります。この長さはコンパイル時に設定されます(そのため特別な用途に合わせ調整できます)。デフォルトの最大長は今後のリリースで変更される可能性があります。"char"(二重引用符に注意)は、char(1)とは異なり、1バイトの領域しか使用しません。過度に単純化した列挙型としてシステムカタログで内部的に使用されます。