PostgreSQL | データ型(Data type) | 文字列型(varchar, char, text)

PostgreSQL で使用できるデータ型のうち、文字の使用について説明する。文字には、可変長文字型 (character varying, varchar)、固定長文字型 (character, char)、制限なしの可変長文字型 (text) がある。

文字列型

文字には次のようなデータ型が用意されている。

サイズ 別名
character varying(n) 可変長文字列 varchar(n)
character(n) 固定長文字列 char(n)
text 制限なしの可変長

character varying(n) は可変長の文字型である。最大長 n までの文字列を保存できる。

character(n) は固定長文字型である。保存する文字が n 個に満たない場合、残りは空白で埋められる。

どちらの文字型も、n 個の文字より長い文字列を保存しようとするとエラーが発生するが、n 個の文字より短い場合はその文字列だけが保存される。

長さを指定せずに character varying だけを指定すると、文字数制限がないものと見なされる。これに対して、長さを指定せずに character だけを指定すると、character(1) と見なされる。

text 型は長さに制限がない可変長文字型である。非常に長い文字列を含む場合に使用する。

たとえば、次のようなテーブルを作成する。

devkuma=# create table strtest (str1 varchar(10), str2 char(10));
CREATE TABLE
devkuma=#

作成したテーブルに次のようなデータを追加する。

devkuma=# insert into strtest values('kuma', 'kuma');
INSERT 0 1
devkuma=# insert into strtest values('  kuma  ', '  kuma  ');
INSERT 0 1
devkuma=#

1 件目のデータには kuma という文字列がそれぞれ含まれており、2 件目のデータには文字列の前後に空白が 2 つずつある kuma という文字列が含まれている。それではテーブルからデータを取得してみる。値を取得するときに char_length 関数も使用し、文字数も一緒に表示する。

devkuma=# select str1, char_length(str1), str2, char_length(str2) from strtest;
   str1   | char_length |    str2    | char_length
----------+-------------+------------+-------------
 kuma     |           4 | kuma       |           4
   kuma   |           8 |   kuma     |           6
(2 行)


devkuma=#

可変長文字列 (str1) は SELECT で取得すると、保存された文字列の前後の空白を含めてそのまま取得されている。それに対して、固定長文字列 (str2) は SELECT で取得された文字列の前の空白はそのままだが、文字列の後ろにある空白はすべて削除されていることが確認できる。

PostgreSQL で使用できるデータ型のうち、文字の使用について説明した。