MySQL

Movable Type 3.35 で、データベースの文字コード latin1_swedish_ci を utf8_general_ci に変換する方法

MySQL で、latin1_swedish_ci を utf8_general_ci に変換する方法では、latin1_swedish_ci を utf8_general_ci に変換する方法を紹介した。 ここでは、実際に Movable Type 3.35 のデータベースが latin1_swedish_ci だった場合に、utf8_general_ci に変換する SQL 文を以下に挙げておく。データベース移行の際に役にたつこともあるかと思う。

注意点としては、この処理を実行したら、


<strong><font color="red">mt-config.cgi (場所はどの行でもかまわない)に SQLName 1</font>

と1行追加すること。

続きを読む

Linux に、phpMyAdmin 2.10.1 をインストールする方法

簡単にいうと、「scripts/setup.php 実行後、config/config.inc.php を ./ にコピーして、 .htaccess を設定」 すればよい。

※Fedora Core 6 で phpMyAdmin を Fedora Core OS 自体のインストール時、またはパッケージマネージャ(ソフトウェアの追加・削除)からインストールした人は、phpMyAdmin は /usr/share/phpMyAdmin にインストールされ、https://127.0.0.1/phpMyAdmin/ からアクセスできる。ここで、ブラウザから基本認証でユーザー名とパスワードを聞かれてくるから、ユーザー名 root、パスワードなしでアクセスする。

続きを読む

Fedora Core 6 で、パッケージマネージャで追加した phpMyAdmin を使う。

Fedora Core 6 のパッケージマネージャで phpMyAdmin を追加しても、localhost からしかアクセスできないので注意する。以下は必要情報。

  • phpMyAdmin がインストールされるディレクトリ: /usr/share/phpMyAdmin
  • アクセス URL: https://127.0.0.1/phpMyAdmin/
  • パスワード: MySQL のユーザー名とパスワード
  • localhost 以外からアクセスできるようにしたいときは、phpMyAdmin.conf の セクションを以下のように修正する。 order deny,allow # deny from all ←コメントアウト # allow from 127.0.0.1 ←コメントアウト allow from all # ←すべてのマシンからアクセス可能にしてしまえ!
続きを読む

Linux に、phpMyAdmin 2.9.1 をインストールする方法

簡単にいうと、「scripts/setup.php 実行後、config/config.inc.php を ./ にコピー」 すればよい。

2006/12/31 追記:

Fedora Core 6 で phpMyAdmin を Fedora Core OS 自体のインストール時、またはパッケージマネージャ(ソフトウェアの追加・削除)からインストールした人は、phpMyAdmin は /usr/share/phpMyAdmin にインストールされ、https://127.0.0.1/phpMyAdmin/ からアクセスできる。ここで、ブラウザから基本認証でユーザー名とパスワードを聞かれてくるから、ユーザー名 root、パスワードなしでアクセスする。

(以上)

続きを読む

Java で、JDBC を使って MySQL にアクセスする方法

Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。

ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。

以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。

import java.sql.*; public class MySQLJDBCTest {
public static void main(String[] args) {

    try {
        // ドライバをロード
        Class.forName("org.gjt.mm.mysql.Driver");

        // データベースへ接続
        String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                   + "useUnicode=true&characterEncoding=UTF-8";
        Connection con = DriverManager.getConnection(url);

        // SQL 文を生成
        Statement s = con.createStatement();
        String sql = "SELECT * FROM `users`";

        // クエリーを実行して結果セットを取得
        ResultSet rs = s.executeQuery(sql);

        // 検索された行数分ループ
        while(rs.next()){
            String name     = rs.getString("name");  // ユーザー名
            String password = rs.getString("pass");  // パスワード

            // 表示
System.out.println(name + " / " + password);
        }

        // データベースから切断
        s.close();
        con.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

コンパイル

# javac MySQLJDBCTest.java

実行

# java MySQLJDBCTest
続きを読む

Perl で、データベースを使う

Perl で、データベース (ここでは MySQL を使うときの基本) をおさらいしよう。Perl でのデータベースへのアクセスは、DBI モジュールを使う。このモジュールは XS で書かれているため、Linux などにインストールするには gcc のコンパイル環境が必要である。レンタルサーバは予め DBI がインストールされているところを選んでおけば間違いないが、そうでない場合は自力でインストールする必要があるため注意しよう。
さて、以下はデータベース中のテーブルのフィールドが id、name、value となっていてそれらを扱う場合の例である。最初のデータベースの定義のところで、mysql のところを Pg とするだけで PostgreSQL に対応できる (ようである)。
スクリプト中ではデータベースのテーブルを変数でマッピング (定義) している (ハッシュを使う方法もあると思うのでもっといい方法があったら教えて欲しい)。こうしておくと後でテーブルの定義を変更したときなど柔軟に対応できるだろう。
foreach の中の「$_」は、Perl では「現在処理中のデータ」であり、

foreach my $data (@$DATA) {
$id    $data->$T_FIELD[$T_ID];
$name  $data->$T_FIELD[$T_NAME];
$value $data->$T_FIELD[$T_VALUE];
}

などするのと同義である。
DBI->selectrow_arrayref は、selectrow_array と似ているが、結果をリファレンスで複数行返すところが異なる。リファレンスなのでその後の処理も高速である (と思われる)。

使用するモジュール


use DBI;
#!/usr/bin/perl use DBI; # データベースの設定 our $DB_NAME = 'DBI:mysql:your_database_name'; our $DB_USERNAME = 'your_username'; our $DB_PASSWORD = 'your_password'; our $DB_TABLE = 'your_table_name'; # テーブルの定義 our $T_ID = 0; our $T_NAME = 1; our $T_VALUE = 2; our @T_FIELD = (
'`id`',
'`name`',
'`value`'
); # データベースに接続 my $DB = DBI->connect($DB_NAME, $DB_USERNAME, $DB_PASSWORD)
   || die "Connection error";
# データを検索 my $DATA = $DB->selectall_arrayref(
                        qq|SELECT * FROM `$DB_TABLE` |
                      . qq|WHERE $T_FIELD[$T_ID]='ここに検索したい ID を書く'|
                    );
# データがあれば if(@$DATA) {
my $id, $name;

# データを出力
foreach (@$DATA)    {

    $id    = $_->[$T_ID   ];    # $T_ID    = 0
    $name  = $_->[$T_NAME ];    # $T_NAME  = 1
    $value = $_->[$T_VALUE];    # $T_VALUE = 2

    print "$id / $name / $value\n";      # データを表示
}
} # データベースの接続を切断 $DB->disconnect(); 1;
続きを読む

Perl で、セッション管理をしたい。 (Apache::Session)

Apache::Session を使う。 パフォーマンスを少し測ってみたら CGI::Session よりも若干速いようである。

このモジュールは eval {...}; とセットで使うとよい。 - Perl で、例外処理をするような感じのもの。if($@) {...} のセットで使う。eval にはセミコロン(;) を忘れないこと。

例では、%session を $session としてハッシュで返している。
このモジールを使う利点は、ID の長さを自由に変えられることである。CGI::Session の場合は、ID の長さを変えたければ、自分で書かなければならない。一方で短所は、セッションの有効期限を設定できないこと。そのため、MySQL 中のsessions テーブルに timestamp フィールドを独自に追加して、自身の CGI の中か cron で適宜 reap する必要がある。また、セッションオブジェクト中の個別のデータにも有効期限を設けることはできない (CGI::Session はできる)。それでもこのモジュールが良いのは、パフォーマンスが CGI::Session よりも若干良いのと、ID の長さを変えられるからである。


use DBI;
use Apache::Session;

このモジュールは永続ストレージ (要はセッション情報をずっと溜めておけるデータベース) の種類によっていろいろな種類がある。


Apache::Session::MySQL
Apache::Session::Postgres
Apache::Session::File
Apache::Session::Oracle
Apache::Session::Sybase
Apache::Session::DB_File
Apache::Session::Flex 	実行時にすべてのパラメータを指定する

以下の例では Apache::Session::Flex を使っている。

use DBI; use Apache::Session::Flex; $session = _getSession; print $session->{_sessin_id} sub _getSession {
my $db;
my ($database, $username, $password);
# 以上の変数には値を入れること。

$db = DBI->connect("DBI:mysql:$databasename",
                             $username,
                             $password
                             ) || die 'Cannot connect db';
eval {
tie %session, 'Apache::Session::Flex', $sid, {

    Store      => 'MySQL',
    Lock       => 'MySQL',
    Generate   => 'MD5',
    IDLength   => 32,
    Serialize  => 'Storable',
    Handle     => $db,
    LockHandle => $db,
};
}; # セミコロンを忘れないこと if($@) { # $@: error message of eval
return undef;
} # セッション ID の取得に成功。ここに処理を書く。
return \%session;
}
続きを読む
MySQL を購読