スプレッドシートで作成したデータをMySqlに流し込みたい。
しかし、
スプレッドシートのマクロをいじってスマートにデータの連携を図りたい。と思うも挫折。
ターミナルをいじってみるも挫折。
そんな私でもできた、比較的アナログで分かりやすいデータのインポート方法です。
phpMyAdminの画面からインポートするので、ターミナルを触ることもコードを書くこともありません。比較的失敗しにくい方法ではないでしょうか。

本当はもっと正しいやり方があると思うのですが、とりあえず手元のデータをDBに入れることができたので、その備忘録です。
前準備
CREATE TABLE ではなく INSERT なので、あらかじめDBにテーブルは作成済みの状態からスタートします。
今回のテーブルはカラムが9つ。
カラム名と型はこんな感じです。
phrase_thai (verchar)
phrase_jp (verchar)
phrase_eng (verchar)
remark (verchar)
category_id (int)
delete_flg (tinyint)
create_date (datetime)
update_date (timestamp)
そしてスプレッドシートにも同じカラム名で同じ数だけカラムを作ってあります。
スプレッドシートのデータをcsvでダウンロード
まずはスプレッドシートのデータから落とします。
ファイル → ダウンロード → カンマ区切りの値(csv、現在のシート)
を押してcsvをダウンロード。
次にMyAdminの該当テーブルを開きます。
phpMyAdmin側でインポート
phpMyAdminの該当テーブルを開いたら、インポートタブを選択。
次に必要項目を入力してゆきます。
- インポートしたいファイルを選択
- 1行目は飛ばす設定にする(カラム名の行はインポートせず飛ばしたい)
- データの形式はcsvを選択。
さらに下にある細かなオプションは今回は触りませんでしたが、今後データを更新する際はUpdate data when duplicate keys found on import (add ON DUPLICATE KEY UPDATE)のオプションは便利そう。
最後に、goボタンを押すとインサートが始まります!
出てきたエラー1
Invalid column count in CSV input on line 1
こちらのエラーは文面の意味としては「カラムの数が違うよ」といった内容になるそうなのですが、私の場合は1行目(カラム名を入力している行)も読み込んでいたことが原因でした。
上記のように1行目は飛ばす設定にすれば解決します。
出てきたエラー2
Incorrect integer value: ” for column ‘id’ at row 1
このエラーは、int型やtinyint、datetime型で入れる項目(つまりvarchara/text以外)が空欄になっていると出ました。phpMyAdmin側でnullはOKにしているはずなのに・・・
仕方がないのでとりあえず適当な数値をスプレッドシート側で放り込んでおいて、空欄を無くしました。
オートインクリメント設定にしているidに関しては最初からスプレッドシート側で入力しておいたので分かりませんが、空欄ならこちらも同じエラーになってた・・・かも?
精進します。
繰り返しになりますが、もっとスマートにインポートする方法はあるはずなのです。
空欄のままでもnullとして保存してくれるとか、オートインクリメントでidを自動付与してくれるとか・・・
なので、あくまで「とりあえずこのデータ達を放り込みたいんじゃー」という時の応急処置としてです。
今回のデータは今後も触る必要があるので、私個人としてもより正しい方法をアップデートしてゆきたいところです。精進せねば!