【PostgreSQL】文字型の型について整理してみました(character、character varying、text)

PostgreSQLその他

character型

characterとは

character型は、「character(整数)」と書き、その桁数分必ず文字で埋まる列です。

文字列が定義した長さに満たない場合、半角スペースで埋まります。

「character」と整数を省略した場合、「character(1)」と同じ意味になります。

「character varying(整数)」とは、列の意味が異なるので注意して下さい。

--文字比較は後ろのスペースあり・なしどちらでも可(TRUE)となります。
--※ 前のスペースは区別されるため注意して下さい。
--例:Helloをchar(10)として、"="の右の文字列と比較
select cast('Hello' as character(10)) = 'Hello';     -- 'true'(一致)
select cast('Hello' as character(10)) = 'Hello   ';  -- 'true'(一致)
select cast('Hello' as character(10)) = '   Hello';  -- 'false'(不一致)

 

使用例

--1.定義の例(CREATE TABLEでの使用)
CREATE TABLE テーブル名
(・・・
列名 character(桁数), -- 列を定義
・・・)

--2.列を追加する
alter table テーブル名 add column 列名 character(10);

--3.characterに変換する
select cast('Hello' as character(10));           -- 'Hello     '
--※ 長さがオーバーしている場合はそこで自動的に切られます
select cast('abcdefghijklmn' as character(10));  -- 'abcdefghij'

--4.関数で変数を宣言する
variable1   character(10);

 

 

character varying(整数)、character varying

まず「character varying(整数)」と「varchar(整数)」は、全く同じものです。

ただし、varyingとついていない「character(整数)」とは異なるもののため注意して下さい。

 

「character(整数)」はスペース埋めがされるため、必ずその桁数になりますが、

「character varying(整数)」は、スペース埋めがされないため登録した文字の長さになります。

整数を省略した「character varying」は、1GBまで入る文字型となります。

 

また、下の例にあるように後ろのスペースがあり・なしによって文字の一致判定が異なります。

「character(整数)」は後ろスペースがあっても「一致」と判定しますが、

「character varying(整数)」は後ろスペースがあったら「一致しない」と判定されます。

--文字比較は後ろのスペースがあった場合、
--「異なる」と判定される点がcharacter(整数)と異なります。
--例:Helloをcharacter varying(10)として、=の右の文字列と比較
select cast('Hello' as character varying(10)) = 'Hello';    -- 'true'(一致)
select cast('Hello' as character varying(10)) = 'Hello   '; -- 'false'(不一致)
select cast('Hello' as character varying(10)) = '   Hello'; -- 'false'(不一致)

 

使用例

--1.定義の例(CREATE TABLEでの使用)
CREATE TABLE テーブル名
(・・・
列名 character(桁数),   -- 列を定義
列名 character varying, -- 列を定義
・・・)

--2.列を追加する
alter table テーブル名 add column 列名 character varying(10);
alter table テーブル名 add column 列名 character varying;

--3.character varyingに変換する
select cast('Hello' as character varying(10));   -- 'Hello'
select cast('Hello' as character varying);       -- 'Hello'
--※ 長さがオーバーしている場合はそこで自動的に切られます
select cast('abcdefghijklmn' as character varying(10));  -- 'abcdefghij'

--4.関数で変数を宣言する
variable1   character varying(10);
variable1   character varying;

 

 

text型

text型は、「character varying」と同じものです。

※ textとvarchar(character varying)の違い