文字型を使用する例
CREATE TABLE ステートメント
次の CREATE TABLE ステートメントでは、VARCHAR および CHAR データタイプの使用を示しています。
create table address( address_id integer, address1 varchar(100), address2 varchar(50), district varchar(20), city_name char(20), state char(2), postal_code char(5) );
次の例ではこの表を使用しています。
可変キャラクタ文字列における末尾の空白
ADDRESS1 は VARCHAR 列であるため、2 番目の挿入アドレスの末尾の空白は意味的に重要ではありません。すなわち、これらの 2 つの挿入アドレスは一致します。
insert into address(address1) values('9516 Magnolia Boulevard'); insert into address(address1) values('9516 Magnolia Boulevard ');
select count(*) from address where address1='9516 Magnolia Boulevard'; count ------- 2 (1 row)
もし ADDRESS1 列が CHAR 列であり、同じ値が挿入されたと仮定すると、COUNT(*) クエリはキャラクタ文字列を同じものとして認識し、2
を返します。
LENGTH 関数の結果
LENGTH 関数は、VARCHAR 列内の末尾の空白を認識します。
select length(address1) from address; length -------- 23 25 (2 rows)
CHAR 列である CITY_NAME 列の Augusta
の値は、入力文字列内の末尾の空白に関係なく常に 7 文字になります。
列の長さを超える値
文字列は、宣言した列幅に適合するように切り捨てられることはありません。
insert into address(city_name) values('City of South San Francisco'); ERROR: value too long for type character(20)
この問題の解決策は、値を列のサイズにキャストすることです。
insert into address(city_name) values('City of South San Francisco'::char(20));
この場合は、文字列の最初の 20 文字 (City of South
San Fr
) が列にロードされます。