【PostgreSQL】文字型の型について整理してみました(character、character varying、text)
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)の違い