2005年12月24日土曜日

windows版MySQLで、テーブル名を大文字にするには

Windows版のMySQLは、デフォルトでテーブル名等が強制的に小文字にされてしまう。たとえば「TABLE」としたいのに、「table」になってしまうなど。
これを回避するには、my.iniの[mysqld]の項に
lower_case_table_names=0
を入れてやるだけ。MySQL再起動すれば解決です。
この値のデフォルトは、Windows では 1 で、Unix では 0 です。

2005年12月23日金曜日

MRTGを入れた

自宅サーバーに、MRTGを入れてみました。
「mrtg linux インストール」でググってみたら、なんだか面倒そう。しかしここ最近サーバーの調子が悪かったので頑張って入れてみることにした。
http://vine.1-max.net/net-snmp+MRTG.html
このサイトを参考に(というかほぼそのまんま)、インストールを進めたところ、特に何もひっかからずすんなりインストールできました。案ずるより産むがやすし。
今回は、apt-getが大活躍。net-snmp、zlib-devel、libpng-devel、gd-develなどをapt-getでインストールしましたが、とっても楽ちんでした。

MySQL : Error #1364 : Field '%s' doesn't have a default value

ローカルで開発しようと思い、Windowsにapache、php、mysql5.0を入れた。で、アプリを動かしてみたら、エラーが出る。調べてみたらSQLエラーらしい。
Error #1364 : Field '%s' doesn't have a default value
というエラーメッセージが。
insert into TABLE (aaa, bbb) values ('AAA', '');
という具合に、''で空白を挿入しようとするのがダメらしい。普段Linux上でMySQLを使ってるときはこんなエラー出たこと無いのに。。。
ググってみても、それらしきソースは見つからない。そこでmy.iniを見てみると、なんだか見慣れないオプションが設定されている。
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
http://www.limy.org/program/db/mysql/mysql_option.html
↑このサイトによると、「他ベンダーのデータベースやバージョンの違うMySQLとの互換性の為に使用します。詳細は不明です。」とのこと。
とりあえずコメントアウトしてMySQL再起動してみたら、見事解決。。。
一体なんだったんだろう。よくわからないが、とりあえず良かった。

phpからMySQLへ接続するとき「Client does not support authentication protocol requested by server」というエラーが出る

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client

こんな感じのエラーが出た場合は、

SET PASSWORD FOR root@localhost = OLD_PASSWORD('password_str');

で解決。
パスワード暗号化の互換性で起きる問題らしい。

2005年12月22日木曜日

phpのfsockopen関数でhttpsのサイトへ接続する

fsockopen関数でhttpsのサイトへ接続する場合、phpを --with-openssl のオプションをつけてコンパイルする必要がある。そうすると、phpinfo の Registered PHP Streams の項目に「https」が出てくる。
それをやらずにfsockopenでhttpsサイトにつなごうとすると、「no SSL support in this build」というエラーが出てしまう。
。。。
ウェブでいろいろ調べた結果、このことはわかったのだが、どーーーしてもうまくいかない。何度コンパイルしてもダメ。
なので、
・apacheを止める
・make distcleanする
・再コンパイル
・make&make install
これをやったらうまくいった。結局、半日くらい無駄にしてしまった。。。
phpを再コンパイルする場合は、必ずapacheは止める。更に、それでもダメな場合はいったんmake distcleanしてやる。
phpの再コンパイルで詰まったら、このことを思い出すようにしよう。。。

mysqldumpで文字コード(charset)を指定

mysqldump HOGE_DB --set-charset=ujis > HOGE.sql
という感じで、--set-charset=*** と指定してあげるだけ。

2005年12月21日水曜日

MySQL関数CASTで型変換する

select cast('-0008000' as signed);
で
-8000
と言う具合に変換できる。
asの後ろにつけられる引数は、以下の通り。
BINARY
CHAR
DATE
DATETIME
SIGNED (INTEGER)
TIME
UNSIGNED (INTEGER)
http://dev.mysql.com/doc/refman/4.1/ja/cast-functions.html