b.l0g.jp     About     Archive     Feed

symfonyでデータをMySQLにロードする際のduplicate entryエラー

symfony 1.4.6 + XAMPP 1.7.3(Windows)で、ありがちなエラーではまったので、メモ。

symfonyのschema.ymlとfixture.ymlを記述して、
# symfony doctrine:build -all -and-load -no-confirmation
で、一気にデータベースの再構築とデータのロードを行おうとしたところ、以下のエラー発生。
>> doctrine  created tables successfully
>> doctrine  Loading data fixtures from "C:\…\Eclipse\symfony\data/fixtures"
>> doctrine  Loading data fixtures from "C:/…trineGuardPlugin/data/fixtures"
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '????' for key 'name'
当たり前だが、fixture.ymlでは重複するような値を定義してはいない。????というのが気になるが、これは何?
どうやらこれは、データベースの文字コードがlatin1などになっている場合に起きるようである。データベースの文字コードをUTF-8にすると共に、fixture.ymlに日本語のキーが含まれている場合、こちらの文字コードもUTF-8にする(Windowsではメモ帳などを使って編集すると普通Shift-JISになるので注意)。
[mysqld]
default-character-set=utf8
character_set_server=utf8
skip-character-set-client-handshake
[mysql]
default-character-set=utf8
XAMPPのインストールフォルダ以下、mysql\bin\my.ini ファイル内の各項目に、上記を追記し、
net stop mysql   # MySQLサービス停止
net start mysql  # MySQLサービス開始
mysql -uroot -p パスワード
mysql> drop database データベース名;   # 念のためDB削除
mysql> create database データベース名;   # 念のためDB再作成
としてMySQL再起動、データベース再作成をしてからもう一度
# symfony doctrine:build -all -and-load -no-confirmation
とすれば、すんなりデータベースを作成できる。
なお、自分がやったときには、MySQLのstatusコマンドではUTF-8になっていたのに、どうしても上記のDuplicate entryのエラーが出てしまい、混乱した。
mysql  Ver 14.14 Distrib 5.1.41, for Win32 (ia32)
Connection id:          5
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.1.41 Source distribution
Protocol version:       10
Connection:             Named pipe: MySQL
Client characterset:    UTF-8
Server characterset:    UTF-8
UNIX socket:            MySQL
Uptime:                 9 min 40 sec
この場合、以下のコマンドでも確認し、全部の設定がUTF-8に揃っているかを見てみるべし。
mysql> show variables like 'char%';
+---------+--------------+
| Variable_name            | Value                                  |
+---------+--------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | C:\eclipse\xampp\mysql\share\charsets\ |
+---------+--------------+
8 rows in set (0.00 sec)
どれかがlatin1などのままならば設定が不十分なので、もう一度my.iniを確認すること。

成功者の告白

「5年間の起業ノウハウを3時間で学べる物語」と副題が付いているが、起業そのもの(事業を興すこと)ではなく、起業した後、事業が安定するまでの間にその企業が陥りやすい問題点を、小説形式で紹介している。巷では、日本では起業が少ないとか、起業しようとかするなとか、色々な話が流れているが、起業した後どうしたらいいのかという点について書かれた本は少ないように思う(実際自分がそういうステージに達していないから気づかないだけかもしれないが)。

特にこの本では、直接にビジネスに関係することというより、人間関係を中心に、しかも会社内だけに限らず人生の中で起業がどういう影響を及ぼしていくのかについて言及しており、なかなか面白い。内容は、エピローグにまとめてあるとおり。

  1. 成功に向かって一歩を踏み出す。仕事は辛いが家庭は円満
  2. 成功に向かって離陸。仕事は好調、家庭で歪みが出始める
  3. 成功への分かれ目。仕事は好調、人間関係で問題勃発。家庭はあきらめムード
  4. 仕事と家庭のバランス回復。仕事では人を指導する立場に、家庭では相互依存へ

本文では、この過程を多少大げさに時系列で描いている。起業した人、したい人だけでなく、自分の会社がどのステージにいるのか客観的に見るいい機会にもなるので、一般企業に勤める人にも役に立つだろう。

本文は前述の通り面白いのだが、読み進めるほど、起業の困難にブチ当たるどころか、事業を興すことが何かも体験していない自分が歯がゆい。

登山記録に使えるGPSアプリ My Tracks

自分がAndroid携帯(Sony ErricsonのXperia)を買ったのは、スマートフォンならではの自由度の高さ(画面の大きさやセンサーの多さなど)を活かしたアプリケーションを、自分で作って使ってみたいと思ったことがきっかけである。スマートフォンといえばiPhoneじゃない?という人が多いと思うが、登山によく行く自分にとって、少なくとも現時点ではドコモとauと比較するとかなり電波状況の悪いソフトバンクテレコムに乗り換えるという選択肢はどうしても取れなかった。また、iPhoneアプリを作るには、まずMacを買わなければならないというのも、Android携帯を選んだ理由である。現時点で、良好な電波状況と端末の完成度の両方を満たす端末は、Xperia以外にないといえる(auのIS01もありという人もいるかもしれないが)。と思っているのだが、なぜか自分の登山仲間のスマフォ持ちはiPhoneばっかり。へっ!iPhoneなんてソフバンで電波届かないから、どうせ山に登って「山頂なう!」ってつぶやきもできないくせに!(笑)

具体的に作ってみたかったアプリとしては、登山道を歩きながらGPSデータを保存してくれる、GPSロガーである。ところが、Xperiaを入手してあれこれと初歩的なアプリを作っているうちに、My Trackというアプリを見つけた。

My Tracks for Android

これはまさに欲しかったアプリではないか! 事前に調べた限りではGPSロガー的なアプリは見つからなかったのだが(iPhoneアプリはいくつか見つけた)、探し方が悪かっただけらしい。そんなわけで、自分で作らなくても既にあったので、あっさりと自分のAndroidアプリ制作意欲はほぼゼロまで削がれた。2010年5月からはソースコードも公開されたため、改変も可能になった。

mytracks - Project Hosting on Google Code

使い方は簡単で、Record Trackというメニューを選んで歩き始めると、一定の間隔でGPSの情報を記録し、Googleマップ上に表示してくれるというのが基本機能。以下の画面は乾徳山に登った時のコースの一部。機種や電波の受信状況にもよるだろうが、結構高精度で記録が取れる。この時はRecord Trackするのを忘れていて、一部のルートしか記録できなかった。

Stop Recordメニューを選べば、記録終了。Googleマップでは、拡大すると等高線も表示されるので、地形なども推測できる。

画面中央左右の矢印をタップすると、他の情報も見られる。右をタップすると、歩いた距離や最高・平均速度、最低・最高標高、標高差などが確認できる。

さらに右をタップすると、横軸に距離、縦軸に標高と歩行速度のグラフが見られる。緑が標高で、この時は1.5kmほど歩く間に1580mぐらいから1800m近くまで登った様子がわかる。青が歩行速度で、見方は…単位がいまいちよくわからない。

もちろんGPSのトラックデータはPCにコピーすることができる。そのデータをGoogle Earthやカシミール3Dに重ねあわせてみるとまた面白いだろう。

このアプリ自体は、なにも登山にだけ用途が限られているわけではなく、ウォーキングやジョギングの際などにも色々使い道が考えられる。日本語化はされていないようだが、「Android携帯を持っていて登山やウォーキングをする」という人は日本にはまだまだ少ないだろうから、そんなものかもしれない。オープンソースなので自分で翻訳してもいいのだが、まずは機能が分かっていないので、もう少しあちこちの山に行く時に使ってみようと思っている。