郵便番号は整数型か

 前回に引き続き、はじめてのPHPプログラミング 基本編5.3対応のゆるいところの最終回はセキュリティの話題ではなく、データベースの列の型についてだ。
 本書のP215には、SQLiteを使って住所録のテーブルを作ろうとあるのだが、テーブルの形式は以下のようになっている。

カラム名 意味 データ型 主キー NOT NULL 備考
id 通し番号 INTEGER 自動的に通し番号が割り振られる 
name 氏名 TEXT -  
zip 郵便番号 INTEGER(7) - - ハイフン(-)を除いた7桁の整数
address 住所 TEXT - -  
create_at 登録日時 DATETIME -  

 郵便番号の型がINTEGER(7)になっているのを見て、私は目をむいた。
 一般的に、郵便番号はVARCHAR(7)かVARCHAR(8)にする場合が多いと思う。もっと一般的に、「××番号」と言われるものは、番号=数値列ではあるが、文字列型で受ける場合の方が多い。電話番号、暗証番号などはその代表例だ。これらに共通する性質は、

  • 先頭のゼロに意味がある
  • 左詰で記述する
  • 算術演算の対象でない

というもので、郵便番号も全てあてはまる(たとえば札幌市北区の郵便番号は001-0000)。銀行預金の口座番号は、意味としては右詰だから上の理屈としては整数型でもよいことになるが、それでも文字列型を使う方が一般的ではないか。
 郵便番号が出てくるのはデータベースというものの説明の箇所だけで、その後のプログラミング解説には出てこないし、整数型でも処理ができないわけではないが、気になった。