モノレビュー

郵便番号をMySQLへインポートする方法

全国郵便番号データをMySQLへインポートする方法です。一度やってしまうと1年くらいはほったらかし状態のため、毎回やり方を模索しながらインポートしているので備忘録代わりです。

郵便番号データを用意する

まずは郵便局のホームページからCSVデータをダウンロードしてきます。
読み仮名データの促音・拗音を小書きで表記するもの – 日本郵便

標準ではlzhファイルのダウンロードとなっているので、「zip形式でのダウンロード」をクリックするとダウンロードリンクzipファイルに変わります。

全国一括をダウンロードします。

ダウンロードファイルを解凍すると「KEN_ALL.CSV」ファイルができます。文字コードははShft-JISになっており、でそのままExcelで開くこともできます。

中身はこのようなフォーマットです。

01101,”060  “,”0600000″,”ホッカイドウ”,”サッポロシチュウオウク”,”イカニケイサイガナイバアイ”,”北海道”,”札幌市中央区”,”以下に掲載がない場合”,0,0,0,0,0,0
01101,”064  “,”0640941″,”ホッカイドウ”,”サッポロシチュウオウク”,”アサヒガオカ”,”北海道”,”札幌市中央区”,”旭ケ丘”,0,0,1,0,0,0
01101,”060  “,”0600041″,”ホッカイドウ”,”サッポロシチュウオウク”,”オオドオリヒガシ”,”北海道”,”札幌市中央区”,”大通東”,0,0,1,0,0,0
01101,”060  “,”0600042″,”ホッカイドウ”,”サッポロシチュウオウク”,”オオドオリニシ(1-19チョウメ)”,”北海道”,”札幌市中央区”,”大通西(1~19丁目)”,1,0,1,0,0,0
01101,”064  “,”0640820″,”ホッカイドウ”,”サッポロシチュウオウク”,”オオドオリニシ(20-28チョウメ)”,”北海道”,”札幌市中央区”,”大通西(20~28丁目)”,1,0,1,0,0,0
01101,”060  “,”0600031″,”ホッカイドウ”,”サッポロシチュウオウク”,”キタ1ジョウヒガシ”,”北海道”,”札幌市中央区”,”北一条東”,0,0,1,0,0,0
01101,”060  “,”0600001″,”ホッカイドウ”,”サッポロシチュウオウク”,”キタ1ジョウニシ(1-19チョウメ)”,”北海道”,”札幌市中央区”,”北一条西(1~19丁目)”,1,0,1,0,0,0
01101,”064  “,”0640821″,”ホッカイドウ”,”サッポロシチュウオウク”,”キタ1ジョウニシ(20-28チョウメ)”,”北海道”,”札幌市中央区”,”北一条西(20~28丁目)”,1,0,1,0,0,0

nkfかエディタの機能を使って文字コードをUTF-8に変換し、半角カナを全角に直しておきます。

MySQLに郵便番号用テーブルを用意する

郵便番号データの説明 – 日本郵便

ここの説明を読むと

これを元にテーブルを設計していきます。主キーをJISコードか郵便番号に設定したいのですが、どちらも重複しているので主キーはなしで設定します。

そのままではSELECTしたときに速度が遅いので、郵便番号7桁と市区町村名にインデックスを張っておきます。

CREATE TABLE `m_zip` (
  `jis` char(5) NOT NULL DEFAULT '',
  `zip_old` char(5) NOT NULL DEFAULT '',
  `zip` char(7) NOT NULL DEFAULT '',
  `pref_kana` varchar(20) DEFAULT NULL,
  `city_kana` varchar(100) DEFAULT NULL,
  `town_kana` varchar(200) DEFAULT NULL,
  `pref` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `city` varchar(100) DEFAULT NULL,
  `town` varchar(200) DEFAULT NULL,
  `flg1` tinyint(1) DEFAULT NULL,
  `flg2` tinyint(1) DEFAULT NULL,
  `flg3` tinyint(1) DEFAULT NULL,
  `flg4` tinyint(1) DEFAULT NULL,
  `flg5` tinyint(1) DEFAULT NULL,
  `flg6` tinyint(1) DEFAULT NULL,
  KEY `zip` (`zip`),
  KEY `town` (`town`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin

テーブルに郵便番号データを流し込む

LOAD DATA LOCAL INFILE '/path/KEN_ALL.CSV'
INTO TABLE `m_zip`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'

これをサーバー上で実行すればインポート完了です。

モバイルバージョンを終了