データベースの VARCHAR 長設計|文字数制限のベストプラクティス

データベース設計において、VARCHAR カラムの長さをどう決めるかは見過ごされがちですが、パフォーマンスとデータ品質に直結する重要な判断です。安易に VARCHAR(255) を設定するのではなく、データの性質に合った適切な長さを選びましょう。

VARCHAR と CHAR の違い

文字列型を選ぶ際、まず VARCHAR と CHAR の違いを理解しておく必要があります。

特性CHAR(n)VARCHAR(n)
格納方式固定長 (空白で埋める)可変長 (実際の長さ分のみ)
ストレージ常に n バイト消費実データ + 1〜2 バイト
適した用途国コード、郵便番号など固定長データ名前、メールアドレスなど可変長データ
検索速度固定長のため若干高速可変長のためわずかにオーバーヘッド

大半のケースでは VARCHAR が適切です。CHAR を使うのは、ISO 国コード (CHAR(2)) や通貨コード (CHAR(3)) のように長さが完全に固定されたデータに限定しましょう。

主要 RDBMS の VARCHAR 上限比較

RDBMS によって VARCHAR の最大長や単位 (文字数 / バイト数) が異なります。

RDBMS最大長単位備考
MySQL 8.065,535 バイト文字数指定行全体で 65,535 バイトの制限あり
PostgreSQL約 1 GB文字数指定VARCHAR と TEXT の性能差はほぼなし
SQL Server8,000 バイト文字数指定VARCHAR(MAX) で約 2 GB まで
Oracle4,000 バイトバイト or 文字MAX_STRING_SIZE で 32,767 バイトに拡張可
SQLite制限なし型宣言は参考情報として扱われる

文字数とバイト数の関係

UTF-8 エンコーディングでは、文字の種類によって 1 文字あたりのバイト数が異なります。VARCHAR の長さを文字数で指定する RDBMS でも、内部的にはバイト数の制約を受ける場合があります。

文字の種類UTF-8 バイト数
ASCII 英数字1 バイトa, Z, 0, @
ラテン拡張・キリル文字2 バイトé, ñ, Д
日本語 (ひらがな・カタカナ・漢字)3 バイトあ, ア, 漢
絵文字・特殊記号4 バイト😀, 🎉, 𠮷

日本語を格納するカラムでは、VARCHAR(100) と指定しても実際には最大 300 バイトを消費する可能性があります。文字カウンタスでバイト数を確認しながら設計すると、想定外のデータ切り詰めを防げます。

カラム長設計のベストプラクティス

適切な VARCHAR 長を決めるための指針を整理します。

データ項目推奨長根拠
メールアドレスVARCHAR(254)RFC 5321 の上限が 254 文字
氏名 (日本語)VARCHAR(50)姓名合わせて 50 文字あれば十分
電話番号VARCHAR(20)国際番号を含めても 15 桁 + 記号
URLVARCHAR(2048)主要ブラウザの URL 長上限
住所VARCHAR(200)日本の住所は通常 100 文字以内
商品名VARCHAR(200)EC サイトの一般的な上限
  1. データの仕様や標準規格がある場合は、その上限に合わせる。
  2. 仕様がない場合は、実データの最大長に 20〜50% のマージンを加える。
  3. 将来の拡張を見越しつつ、過度に大きな値は避ける。
  4. アプリケーション側でも同じ文字数制限のバリデーションを実装する。

まとめ

VARCHAR 長の設計は、データの性質・エンコーディング・RDBMS の仕様を総合的に考慮して決定すべきです。「とりあえず 255」ではなく、根拠のある長さを設定することで、ストレージ効率とデータ品質の両方を高められます。設計段階で想定データの文字数を文字カウンタスで計測し、適切なカラム長を導き出しましょう。