Hatena::ブログ(Diary)

Lazy Technology

2007-04-26

[][]update_atやcreated_atカラムの自動更新を無効にする方法

created_atやupdated_atは便利なカラムではあるが、データ移行にARを使う時にただデータを移したいだけなのに勝手にデータを更新してしまってちょいありがた迷惑な感じに。


ググってもやり方が出てこなかったのでARのソースをGrepする。

それっぽい箇所がtimestamp.rbにあった。

record_timestampsっていうクラス変数をfalseにすれば自動更新が無効になる。

base.cattr_accessor :record_timestamps, :instance_writer => false
base.record_timestamps = true

#(中略)

def create_with_timestamps #:nodoc:
  if record_timestamps
    t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
    write_attribute('created_at', t) if respond_to?(:created_at) && created_at.nil?
    write_attribute('created_on', t) if respond_to?(:created_on) && created_on.nil?

    write_attribute('updated_at', t) if respond_to?(:updated_at)
    write_attribute('updated_on', t) if respond_to?(:updated_on)
  end
  create_without_timestamps
end

def update_with_timestamps #:nodoc:
  if record_timestamps
    t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
    write_attribute('updated_at', t) if respond_to?(:updated_at)
    write_attribute('updated_on', t) if respond_to?(:updated_on)
  end
  update_without_timestamps
end

参考リンク

404 Not Found


2008/2/13 追記

クラス変数はサブクラスでも共通 - Lazy Technologyは抑えておかないと思わぬところでハマるので注意。

2008/3/25 追記

update_without_timestampsメソッドを使うと、その時だけupdated_atやcreated_atの更新を無効に出来る。

[][] MySQL 5.0にCSEで接続する方法

MySQLGUIクライアントはほとんどの人が「phpmyadmin」か「MySQL Query Browser」を使っていると思うんだけど、phpmyadminはWebアプリなので色々とダルイ事が多いし、MySQL Query Browserは日本語の表示は出来ても入力が出来なくて困る、と言うどちらもイマイチで結構ストレスになる事が多かった。


んで、今日ちょっと調べていたらCSEからMySQL 5.0に繋ぐ方法が分かったので手順をメモ。

日本語もちゃんと表示・入力できた。

CSEから直接MySQL 5.0につなごうとすると例外吐いて落ちるんだけど、ODBCを経由すると接続できる。

以下、手順。


概要

大きく以下の三つ。

  1. MySQL Connector/ODBCのダウンロードインストール
  2. ODBCの設定
  3. my.cnfの設定

MySQL Connector/ODBCのダウンロードインストール

http://dev.mysql.com/downloads/connector/odbc/3.51.html

からダウンロードしてインストール

自分はMSI Installerにした。

ODBCの設定

  • ファイル名を指定して実行より「odbcad32.exe」を開く。
  • ユーザDSNタブから「追加」ボタンをクリックする。
  • データソース一覧が表示される。データソースに「MySQL ODBC 3.51Driver」を選択し、完了をクリック。
  • 今度は設定値を入力するダイアログが開くので、Loginタブに必須となる情報を入力。Data Source Nameはデータソース一覧から選択するときに表示される。
  • Advancedタブのさらにその下、Flag3タブの「Read Options From my.cnf」にチェックを入れる。
  • 後その他のオプションはよく分からないのでデフォルトのまま。OKをクリックして終わる。

これでデータソースの作成は完了。

my.cnfの設定

  • C:\my.cnfと言うファイルを作成する。
  • テキストファイルの中身を以下のように。(注2)

[client]

default-character-set=sjis

接続

設定はこれで終わり。

後はCSEからODBCでさっき作ったデータソースを選択して接続すればOKなはず。


自分メモ

自分の環境ではMySQLの設定はサーバクライアント共にUTF-8。勿論DBUTF-8

で、CSEから

show variables like 'char%';

すると以下のような結果になる。

Variable_nameValue
character_set_clientsjis
character_set_connectionsjis
character_set_databaseutf8
character_set_filesystembinary
character_set_resultssjis
character_set_serverutf8
character_set_systemutf8
character_sets_dirC:\dev\mysql5.0\share\charsets\

注意書き

(注1)

cnfという拡張子WindowsだとNetMeeting用か何かに関連付けられていて、my.cnfでファイルを作成するといきなりアイコンが変わってビックリする。でもファイルの中身自体が変わるわけではないので、テキストで開いて編集すればたぶん大丈夫。

自分は我慢ならなかったのでregsvr32 -u msconf.dllとして強制的に排除した。

他に影響があるかどうか不明だけど、参考URLに挙げたサイトで削除OKと出ているのでたぶん問題ないと思われる。まぁ自己責任で。


(注2)

初めはmy.cnfでデフォルト文字コードUTF-8を指定していたのだけれど、CSE側がSJISらしく文字化けしてしまった。

たぶんODBCコネクタがSJIS <-> UTF-8変換をよしなにしてくれてるんだと思う。

参考URL

MySQL :: Page Not Found

404 Error - FC2ホームページ