今までWebサイトにはPostgreSQLを使っていました。前にDBを作ってもらった関係で、文字コードがEUC-JPになっています。今作っているシステムではUTF-8を扱いたいので、どうしようかと困っていました。思い出したのですが、テストのために作ってもらったMySQLがあることを思い出しました。調べてみると、このMySQLはUTF-8で作ってもらっています。そこで急遽MySQLを利用することにしました。PostgreSQLで動いているので、DB部分をMySQLに置き換えます。テーブル作成からです。テーブル作成は、以前テストしたときに(ボツになったので、途中で止まっているのですが)調べました。次はテーブルにインデックスを作成して速度を少しでも上げます。MySQLメモMySQLクイック・リファレンスなどが参考になります。今日はTelnetで接続して、DBにテーブルを作成しました。テーブルを削除します。テーブル削除はPostgreSQLと同じです。テーブル名;次にテーブルを作成します。テーブル作成もPostgreSQLと同じです。timestamp);デフォルト値やNullの禁止などももちろんできます。データ型などはMySQLコマンドリファレンスが参考になります。テーブル名;で確認できます。カラム名、データ型などが一覧表示されます。tables;で表示されます。今日はとりあえずテーブル作成のみです。項目追加や削除、インデックスなどについてはおそらく後日必要になるでしょうから、そのときに。コメントTop↑SQLMySQLへの接続2011年01月05日こんどのクライアントさんとのお仕事は、おそらくMySQLを使うことになりそうなので、テーブルの作成や、PHPからの接続をあらかじめやっておこうと思います。使わないことになったとしても、自分のキャリアのために経験しておきたいと思います。派遣先でWebの開発をやったときは、PostgreSQLだったので、自分のWebサイトはPostgreSQLで組んでいます。いい機会なので、MySQLも経験しておこうと思います。いっても、SQLコマンドほとんど同じだそうです。DBへの接続からです。私の使っているサーバーでは、テーブルを作成したり、直接DBをみたり触ったりするには、Telnetでサーバーへ接続しなければいけません。PostgreSQLは、自動でログインできるようにスクリプトを作っています。それと、レンタルサーバー会社から送られてきた設定情報を参考にスクリプトを編集しました。DB名】を自動で流すようにスクリプトを作ります。当然のごとく、パスワードプロンプトが表示されます。パスワードを入力すると無事ログインできました。これを、毎回パスワードを入力しなくていいようにするのが目標です。初めに試したのが、スクリプトへパスワードを設定する方法です。【-p】オプションの後ろへパスワードを設定します。DB名】でパスワードを自動で送信し、DBへ接続できます。【-p】オプションと【パスワード】はくっつけます。半角スペースは入れません。ここで少々はまってしまいました。パスワードに【&】が含まれていたため、それ以降の文字がパスワードとして認識されず、何度やってもエラーになっていました。【&】を【\】でエスケープすると、問題なくログインできるようになりました。スクリプトにパスワードを含めるやり方は、パスワードが盗み見られる可能性があるので、セキュアな方法ではありません。次はもっとセキュアな方法をさがすことにしました。PostgreSQLの場合を見てみると、自動スクリプトへはパスワードを設定していません。いえば、Webサーバーへパスワードを設定したファイルをアップロードしたような記憶があります。サーバーを調べると、【.pgpass】へパスワードを設定していました。MySQLにもなにかあるはずです。ネットを調べると、いくつか見つかりました。オプション設定ファイルこれらが参考になります。【.my.cnf】へ-------------------------------[client]host="ホスト名"user="DBユーザー名"password="DBパスワード"-------------------------------を書き込み、WebサーバーのトップディレクトリにアップロードすればOKです。-------------------------------[client]password="DBパスワード"-------------------------------だけでもOKです。【=】の後ろのパスワードは【"】でくくらなければダメなようです。してサーバーごとに違うのかも。Telnetへ接続するスクリプトの【-p】オプションをはずします。これでパスワードを自動で読んでくれるようになりました。コメントTop↑SQLInsertしたデータのシーケンスを取得2009年07月26日シーケンスを設定しているテーブルにデータをInsertすると、自動でシーケンス番号が登録されます。この値を取得したい場合があります。PostgreSQLでは、【RETURNING】という関数が用意されています。id;で割り当てられたシーケンス番号が取得できます。table;のSQLを発行したときと同じように値が返ってきます。8.2以上でサポートされている関数です。8.2以下だと別の対処法が必要です。頻繁にデータが登録されるテーブルではないので、【MAX】関数を代用します。version();です。コメントTop↑SQLテーブルの値を操作してupdate2009年07月02日すでにテーブルに登録されている値に文字列を追加してupdateしたり、文字の一部を保存しなおしたりするSQLです。テーブル【table_name】の文字フィールド【field】に文字【_tuika】を追加して、updateするSQLです。'_tuika';追加した【_tuika】の除いて、再updateするSQLです。バックアップとリストア2009年02月23日テーブル単位でDBを移転したくなったので、PostgreSQLのバックアップとリストアに挑戦してみました。以前にやろうとして挫折してしまいました。コマンドそのものは簡単です。入力ファイルパスこう書けば至極簡単なのですが、DBの指定、ファイルのパスの指定方法がわかりません。サーバーについてはほとんど知らないし、どこからコマンドを打っているのかいまいちわからずにやってるので、あてずっぼ色々やってみました。スクリプトからUNIXへ降りて実行できるのかもしれませんが、telnetから実行しています。DB名はWebサーバーからDBサーバーへの接続コマンドを参考にしてみました。ファイルはおそらくWebサーバールートに出力されるはずです。DBとpg_dumpのバージョンが違うと怒られました。これは【-i】オプションで無視できます。出力ファイルパスファイルが出力されました!ここまでくればリストアはすんなりいきます。めでたくテーブル移動に成功です。これをcronなどで動かせば自動バックアップができるようになります。テーブルフィールド変更2008年06月06日うっかりPostgreSQLで作成したテーブルに、余分なフィールドがあったので、削除しようかと思って、方法を調べてみました。新テーブル名;フィールド削除はできないようです。フィールドタイプも変更不可です。しても削除したい場合は、テーブルを作り直し(?)しなければいけません。フィールドタイプ;です。0これでデフォルトが0になります。画像などを保存?があるようです。SE・PGやっていました。次の良い仕事がみつからないので、ビジネスへ注力しようと思っています。