Joomla!でMySQLのテーブルを作る時にハマった
Joomla! のコンポーネントを作っている。その自作コンポーネントのインストール時にMySQLのテーブルを作るんだけど、エラーでかなり苦労した。
1.コメントにシングルクォートが入ってるとダメ(Joomla!固有の問題?)
-- It's ok to use apostrophes.
はNGで
-- It is ok to use apostrophes.
はOK。
問題の切り分けのために簡単なCREATE TABLE文を作って試したけど再現しなかったので、他にも何か条件があるっぽい。
2.外部キーを付けようとするとエラー(MySQLの問題)。
結論から言うと、MyISAM形式のテーブルのフィールドあるいはInnoDBでもインデックスの付いてないフィールドに対して外部キーを付けようとするとエラーになる。自作コンポーネント用のテーブルからjos_users.idに外部キーを付けようとしてたんだけど、jos_usersはMyISAMだった…しかし、このときのエラーが非常に分かりにくい。
ERROR 1005 (HY000): Can't create table '.dbname/tablename.frm' (errno: 150).
これだけだと分からないので、詳しいメッセージを表示させてみる。
mysql> show innodb status; ERROR 1227 (42000): Access denied; you need the SUPER privilege for this operation
普通に解釈すると「SUPER」権限が必要、って感じだけど、実際はそんなのは全く関係ない。
もう少し詳しく調べてみてこんなのを見つけた。show innodb statusコマンドで詳しいエラーメッセージを表示させるのにSUPER権限が必要らしいけど、そんなの不便すぎるし何とかしてくれってコメントが多数付いてる。
ちなみに以下のコマンドでも詳細は分かるらしい。
$ perror 150
以前にもMySQLのエラーは分かりにくいって書いたけど、中々改善しないね。