« ROCK FUJIYAMA 01/15 | トップページ | ジュークボックス英会話 »

2007年1月18日 (木)

PostgreSQL=>MySQL

諸事情により PostgreSQL=>MySQL 移行を行い中。

[ハマリ1]
いつもながら MySQL の timestamp型が変態(更新時に勝手にcurrent_timestamp が入る)。で、いつものようにハマって「ああ、またかよ」とテーブル定義変更。

[ハマリ2]
CSVのデータをDBに入れるアップローダがあるのだけど、CSVの中には平気でローマ数字とか入ってるのよね。これを CP932 => UTF-8 変換してぶち込むんだけど、Postgresはあっさりやってくれたのに、MySQLは set NAMES utf8 とかやっても何故かローマ数字だけが格納時に化ける。
もうね、この手ので悩まされるたびに日本人辞めたくなる。問題解決のための調査なんてもっと嫌。なので、--with-charset=binary で make し直して、インスタンス作り直して完了。変に文字コード変換なんてしなくていいから、大人しくデータだけ管理してて頂戴。

[ハマリ3]
これは今回初のケースだったんだけど、CSVってのが汎用機から出されてくる奴でして。全部のフィールドが固定長で足りない部分はスペースで埋めてあるんですよ。フィールドの中に長さ1のものがありまして、そこに入るのは A〜C か空白(半角スペース)。
で、char(1) のフィールドに入れたのだけど空白だけがどうやっても入らない。
update bar set foo=' ';
とかやると、foo が長さ0になるのよね。
調べてみると、MySQLのchar は timestamp と同様にど変態らしい。char型が勝手にvarcharにされてたり、char型をselectすると末尾の空白をご丁寧に全部削ってくれたり。varchar はinsert とか update の時に末尾の空白を削ってくれるらしい。勘弁してくれよ。そんな優しさいらない。
ということで、char(1) の代わりに text 型を使うという贅沢仕様で逃げた。

Totalで見てMySQLの方がいいとは思うのだけどねぇ。
オマケにPHP4=>PHP5 で fgetcsv が腐ってるというハマリにも遭遇。自前でsplitするものを書いて逃げる。
人生まだまだ知らんことがある。

|

« ROCK FUJIYAMA 01/15 | トップページ | ジュークボックス英会話 »

てっく」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232324/37749440

この記事へのトラックバック一覧です: PostgreSQL=>MySQL:

« ROCK FUJIYAMA 01/15 | トップページ | ジュークボックス英会話 »