ファイルダウンロード

PHPでブラウザに対してダウンロードさせる場合には、
header()関数で自前でヘッダを出力する必要がある。

だけど、header()関数の呼び出し以前に出力(echo , の外部に記述がある等)が存在すると
エラーとなってしまう。

これには、

  • php.iniでoutput_bufferingをOnに設定
  • header()の直前でob_clear()を呼んで出力バッファをクリア

で対処するのがよさげ。

照合順序

MySQLUTF-8を使用するとき照合順序は

  • utf8_general_ci
  • utf8_unicode_ci
  • utf8_bin

の指定によって変わる。

速度重視ならutf8_general_ci、
正確性重視ならutf8_unicode_ciを選ぶと良いらしい。

ちなみに、_ciが末尾についているものは、文字列検索やソートの際に
大文字・小文字を区別しない。

大文字・小文字を区別したければ、utf8_binを指定する。

そろそろ

  • Webアプリとは離れてC/C++とかやらないと。
  • 勉強方法を確立しないと。(いまんとこだらだら、身についてる感じがしない。)
  • ちゃんと継続して日記を書こう。(質より量だ、意味不明でも書いて書いて書きまくれ。)

InnoDBのSELECT〜FOR UPDATEの挙動に悩む

1. Transaction1 でdept_id が1のレコードに行ロックをかける。

SELECT * FROM hoge WHERE id = 1 FOR UPDATE;

2. Transaction2 でdept_id が1のレコードに行ロックをかける。

SELECT * FROM hoge WHERE id = 2 FOR UPDATE;

1 → 2の順に実行した場合、2を実行したときに1とは違う行に対してロックを
かけるはずなのに待ちになってしまう。
行ロックをかける場合、テーブル全体から見たときにロック対象となる行の割合
によっては自動的にテーブルロックになるのかなぁ

2008/08/16 追記

インデックスを張れば解決した。
インデックスが無いと自動的にテーブルロックになるらしい。