MySQL使用時のtimezoneの設定

この前PHPのtimezoneの設定について記述した。この設定は当然PHPスクリプトのみで有効だ。MySQLと連携したシステムを作って、SQL文に日付関連の関数を組み込んだ場合、PHPに処理が渡る前にデータベース操作が終わってしまう。となると、データベース操作で得られる値は、期待したtimezoneでの値とは異なるものになる可能性が高い。そんな時に使うのがこれ。

SET time_zone = ‘+9:00′;

MySQL使用時に「SET NAMES binary;」というおまじないを付ける人も多いと思う。文字化け関連に対応するためにつけるわけだが、やっていることはこれと同じ。「SET」によって環境を設定している。つまりこれにより、一時的にtimezoneに変更を加えることができる。だからPHPからSQL文を発行するときに、毎回このSQL文を一番最初に発行しておいてやれば良さそうだ。

どんな具合に適用されるのかは、しばらく使ってみて確かめることにする。

MySQLのvarchar型の長さについて

2010/01/15 | MySQL

最近気がついた。MySQLのデータ型でvarcharというのがある。varcharを指定した場合、そのカラムに格納することができる文字の長さを指定してやらなければならない。この「長さ」というのは「文字数である」ということに気がついた。

「文字数」とは文字通り「文字の数」。マルチバイトもシングルバイトも関係ない。全角も半角も関係ない。半角アルファベットの「ABCD」や「1234」、全角アルファベットの「ABCD」、平仮名の「あいうえ」、混在した「aAあ1」。これらは全てvarcharでいうところの「長さ4」になる。

文字って奥が深い。

phpMyAdminでVIEW

2010/01/03 | MySQL

MySQLはバージョン5からVIEWを使用できるようになった。最近はデータベースをコマンドラインから扱うことがあまりなく、基本的にphpMyAdminから操作することがほとんどだ。ではphpMyAdminから簡単にVIEWを扱うことが出来るのか。

VIEWの作成は簡単だ。SQLを実行したり、テーブルに対して検索をかけたりしたあとに表示される結果のページに「CREATE VIEW」とあるので、これをクリックするとVIEWが出来上がる。もちろんCREATE VIEWのSQL文を実行することでもVIEWを作ることができる。

しかし現状のphpMyAdminの最新バージョン3.2.4で確認したが、VIEWの内容を、インタラクティブに確認したり修正したりする方法が見つけられない。ウェブで調べたが、そもそもそういう情報を求めている人もあまりいないのか、期待する検索結果が出てこない。結局SQL文を実行するしかないみたい。

VIEWの内容を確認する方法は以下のSQL文。

SHOW CREATE VIEW view_name;

VIEWを修正するためのSQL文(CREATE VIEWの構文をALTER VIEWにするだけ)。

ALTER VIEW view_name AS SELECT … ;

まだまだVIEW機能はこなれていないのだろうか。

phpMyAdminでインポートファイルのサイズを増やす

2009/12/25 | MySQL, PHPの基本

MySQLのダンプデータが60MBほどあった。phpMyAdminでインポートしようと思ったのだが、アップロードできるファイルの最大は16MBとなっていた。60MBのファイルと言っても所詮テキストファイルだから圧縮してしまえば12MBになるから、アップロード自体は出来る。しかしいろいろ考えて、アップロード出来る容量を増やすことにした。

ここのサイズ指定は、単純にphp.iniの設定に依存しているらしい。おそらく.htaccessを設置すれば事足りるだろうが、設置するとInternal Server Errorが表示されてしまう。とりあえずローカルな環境(Windows)で試そうと思っているのだが、なにか問題でもあるのだろうか。

本筋でないことに時間を割くのが嫌なので、php.iniを変更することにした。よくよく考えればおバカな話だが、読み込んでいるphp.iniがどのファイルか分からなくて、何回変更しても、変更した設定が有効にならなかった(正しいファイルを変更していないのだから当たり前)。初心に帰って、phpinfo()で表示されるphp.iniの場所を頼りに設定ファイルを編集した。

Windows版Xamppでは、xampp/apache/bin/php.iniを使用しているらしいことがわかったので、そのファイルを編集した(xampp/php/配下にもphp.iniやphp5.iniがあるので注意が必要)。修正箇所は以下の3つ。

  • memory_limit 512M
  • post_max_size 256M
  • upload_max_filesize 128M

なんとも大盤振る舞いだが、ローカルな環境だから気にしないでいい。php.iniを修正したので、修正後はapacheの再起動が必要。再起動後にphpMyAdminのインポートの項目を見ると「最長: 131kKiB」となっていたkKiBだからMiB、つまり131MiBになった。これで無事一発で処理が完了した。

もし処理が遅い場合はmax_execution_timeの設定を増やしておけば良いかもしれない。

日付関連の便利な関数

2009/12/09 | MySQL

今、MySQLが熱い。MySQLの日付関連の便利な関数(もしくは使い方)を列挙しておく。

  • SELECT NOW();
    現在の日時。年-月-日 時:分:秒。
  • SELECT CURDATE();
    今日。年-月-日。
  • SELECT DATE(CURRENT_DATE( )-1);
    昨日。年-月-日。DATE_ADD関数とか使うほうがいいかも。
  • SELECT UNIX_TIMESTAMP();
    現在のUNIX TIMESTAMP。
  • SELECT FROM_UNIXTIMESTAMP(UNIX_TIMESTAMP());
    UNIX TIMESTAMP値から日付を返す。年-月-日。

他にもいろいろある。類似の関数で時刻出したりとかもできる。VIEW作るときに幅が広がりそう。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net