MySQLのDUPLICATE

例えばユーザーのプロフィール情報を保存しておくuser_profilesテーブルに対して、

・新規登録ならばINSERT

・プロフィール更新ならばUPDATE

するとしよう。

user_profiles

id name intro
1 hoge こんにちは

①登録したいユーザーのデータがuser_profilesに存在するかをみる。

②①が存在していればUPDATE、①が存在していなければINSERTをする。

まぁこれだけですが、プログラムで書くと

とかなる。

これをもっとシンプルにできるのが「ON DUPLICATE KEY UPDATE」です。

これだけで動きます。

ただしこれを使うには、挿入する行に主キーかユニークキーが含まれることが条件です。

重複を許さない主キーかユニークキーに対してINSERTをつかい、主キーかユニークキーが重複してしまうと、勝手にUPDATEが使われるらしいです。

データの有り無し便利ですね。

参考

Pocket

Posted in MySQL.

Perlのdecode

Perlのdecodeを使って [utf-8] → [euc-jp] に変換するときに変なエラーが起こったので、その対策をメモ。

これを実行したところ、以下のエラーが出た。

Cannot decode string with wide characters #この後ろにEncode.pmのエラー行がでる

調べたところ、UTF-8フラグが立っているとこのエラーがでてしまうらしい。

これを回避するために、decodeを呼び出す前にUTF-8フラグをおろせばいいようです。

これで成功する。

_utf8_offでUTF-8フラグをおろすことができるみたい。

参考

Pocket

Posted in Perl.

Perlでリストの要素数

Perlでリストの要素数を取得するには、scalarを使い、

リストをスカラーとして評価するといいらしいです。

@listの要素数「5」が出力されていることがわかる。

では、ハッシュに対してscalarを評価するとどうなるのかもやってみた。

%hashをスカラーとして評価すると「3/8」が出力されていることがわかる。

この「3/8」が何なのか・・・わからないので教えてください。

参考

Pocket

Posted in Perl.