【初心者向け】PostgreSQLの文字列型:CHARACTER VARYING vs VARCHAR
PostgreSQLで文字列を扱う際、CHARACTER VARYING
とVARCHAR
という2つのデータ型がよく使われます。どちらも可変長文字列型ですが、いくつかの重要な違いがあります。
データ型の表記
CHARACTER VARYING(n)
:略称はVARCHAR(n)
VARCHAR(n)
:省略形
ストレージサイズ
- CHARACTER VARYING
- 格納される文字列の長さに応じてストレージサイズが変動
- 最大長nバイト + 1バイト(オーバーヘッド)
- 例:
VARCHAR(10)
の場合、最大10文字の文字列を格納可能。空文字の場合、1バイトのみ使用
- VARCHAR
- 最大長nバイト分のストレージを常に確保
- 空白文字もnバイト分のスペースを使用
パフォーマンス
- CHARACTER VARYING
- 空白文字が多い場合、ストレージサイズが小さくなり、パフォーマンスが向上
- 文字列の長さが短い場合、オーバーヘッドの影響が大きくなり、パフォーマンスが低下
- VARCHAR
- ストレージサイズが常に一定なので、パフォーマンスの予測が容易
- 空白文字が多い場合、ストレージサイズが無駄になる
その他
CHARACTER VARYING
は、古いPostgreSQLバージョンとの互換性のために存在- 新規プロジェクトでは、
VARCHAR
の使用が推奨
項目 | CHARACTER VARYING | VARCHAR |
---|---|---|
データ型の表記 | CHARACTER VARYING(n) | VARCHAR(n) |
ストレージサイズ | 文字列長 + 1バイト | 最大長nバイト |
パフォーマンス | 空白文字が多い場合に有利 | 一定 |
推奨バージョン | 古いバージョン | 新規プロジェクト |
補足
- 上記は、PostgreSQL 9.0以降のバージョンにおける動作です。
- 詳細については、PostgreSQL公式ドキュメントを参照してください。
-- テーブル作成
CREATE TABLE example (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description CHARACTER VARYING(1000)
);
-- データ挿入
INSERT INTO example (name, description) VALUES ('John Doe', 'This is a description.');
INSERT INTO example (name, description) VALUES ('Jane Doe', '');
-- データ取得
SELECT * FROM example;
-- 結果
-- id | name | description
-- -- | -- | --
-- 1 | John Doe | This is a description.
-- 2 | Jane Doe |
- 上記のコードは、
VARCHAR
とCHARACTER VARYING
をそれぞれ使用した列を持つテーブルを作成し、データの挿入と取得を行う例です。 name
列はVARCHAR(255)
で定義されており、最大255文字までの文字列を格納できます。description
列はCHARACTER VARYING(1000)
で定義されており、最大1000文字までの文字列を格納できます。- 2番目のINSERT文では、
description
列に空文字を挿入しています。
実行結果
- 上記のコードを実行すると、以下の結果が表示されます。
id | name | description
-- | -- | --
1 | John Doe | This is a description.
2 | Jane Doe |
ポイント
VARCHAR
とCHARACTER VARYING
はどちらも可変長文字列型ですが、ストレージサイズやパフォーマンスなどに違いがあります。- データベースの設計時には、それぞれの特性を理解した上で、適切なデータ型を選択する必要があります。
他の方法
- PostgreSQL公式ドキュメントを読む
PostgreSQL公式ドキュメントには、CHARACTER VARYING
とVARCHAR
に関する詳細な情報が記載されています。
- チュートリアルやサンプルコードを参考にする
インターネット上には、CHARACTER VARYING
とVARCHAR
の使い方を解説するチュートリアルやサンプルコードが多数公開されています。
- 実際に試してみる
実際にデータベースを作成し、CHARACTER VARYING
とVARCHAR
を使ってデータを挿入・取得してみることで、それぞれの違いを体感することができます。
database postgresql varchar