mysqlのinstallが完了したので、今回はDBD::mysqlでperlからmysqlへの接続方法を紹介します。
DBD::mysqlのinstall
$ /usr/local/bin/perl Makefile.PL \ --mysql_config=/usr/local/mysql/bin/mysql_config \ --testdb=endo_test \ --testuser=endo \ --testpassword=ないしょ $ make $ make test # make install
私の場合、mysqlを/usr/local/mysql へinstallした為、「perl Makefile.PL」でいくつかのoptionを指定する必要があります。
--testdb --testuser --testpassword
「make test」では、テスト用のdatabaseを使用しますが、そのdb名や接続ユーザを指定しています。
DBD::mysqlの接続テスト(機種依存文字や0x5Cも問題なさそう)
以下では、DBD::mysqlでの接続テストを行うscriptを記載しておきます。
今回行った範囲では、機種依存文字(㈱,①)や0x5C(ソ)も問題なさそうです。
#!/usr/local/bin/perl use strict; use warnings; use encoding "cp932"; #DBのサーバ側のencodingはutf8 use Encode; use DBI; use Data::Dumper; my $DB = "DBI:mysql:dbname=endo_test;host=localhost;"; my $DB_USER = "endo"; my $DB_PASS = "ないしょ"; my $DBI_OPT = { AutoCommit => 0 }; sub main { my $dbh = connect_db(); test_insert($dbh); test_select($dbh); # $dbh->commit(); $dbh->disconnect(); } sub test_insert { my ($dbh) = @_; my $sql =<<EOF; insert into test values (?); EOF my $sth = $dbh->prepare($sql); #機種依存文字と0x5C問題を確認します。 $sth->execute( encode("utf8","遠藤㈱エンドウソ①" ) ); } sub test_select { my ($dbh) = @_; my $sql =<<EOF; select * from test EOF my $sth = $dbh->prepare($sql); $sth->execute(); while (my $row = $sth->fetchrow_hashref() ) { #server側のencodeはutf8なので、一旦decodeし、cp932にencodeしてます print STDERR encode("cp932", decode("utf8","$row->{col1}")."\n" ); } } sub connect_db { my $dbh = DBI->connect($DB,$DB_USER,$DB_PASS,$DBI_OPT); # $dbh->do("SET NAMES $CLIENTENCODING") or die "cannot set encoding"; return $dbh; } main();
[endo@colinux tmp]$ ./mysql_test.pl 遠藤㈱エンドウソ① [endo@colinux tmp]$