MySQL徹底入門
ウェブに最適な高速フリー・データベース・サーバー





本ページでは、書籍『MySQL徹底入門』に関する追加情報や正誤表などを公開していきます。
書籍の概要については、書籍情報ページをご覧ください。
また、本書に関するごお問い合わせは、「Q&A」ページ より質問フォームにてお願いします。

更新

2001-08-06
第7章のPerlサンプルの不具合(その2)を追加しました。
第3刷(2001年6月15日刊行)で修正された不具合にその旨を記しました。
 
2001-05-17
「訂正」と「追加情報」を分け、デザインも若干変更しました。
第7章のPerlサンプルの不具合を追加しました。
誤植や不具合のうち、第2刷(2001年3月19日発行)で修正されたものにはその旨を記述しました。
 
2001-02-23
下記のコンテンツを若干修正。
2月13日に置いたSJISサーバー向けサンプルの追記として、SJISサーバーでExampleAをコンパイル・実行する方法を公開しました。
 
2001-02-14
昨日置いたSJISサーバー向けサンプルを、新たに置き直しました。
上記に関連する部分の記述が入り組んでいたので、文章を幾分書き直しました。
 
2001-02-13
第8章のSJIS文字セットのサーバー向けサンプルを追記しました。
 
2001-02-01
本書出版後のMySQLのリリース状況をまとめました。
Windwos環境におけるMySQL+Perlについて情報を掲載しました。
8.3節のmake_sample_table.sqlの実行について情報を掲載しました。
 
2001-01-17
ページ全体の見栄えを微調整+字句修正しました。
環境変数LD_RUN_PATHの設定方法について追加しました。
ExampleB.jarファイルを掲載(CD-ROM収録漏れ)。
添付CD-ROMの不具合が続き、まことに申しわけありません。
 
2001-01-16
リスト5.6の修正情報を追加。
toymodel2.plファイルを掲載(CD-ROM収録漏れ)。
 
2000-12-19
CD-ROM収録物(mysql-ruby-2.3.1-msc.zip)の更新情報を掲載。
本ページを公開しました。

追加情報

MySQL 3.23.xxシリーズが正式リリース

本書の添付CD-ROMに収録したMySQLは、バージョン2.23.28-gammaで、3.23系のgammaステイタスのものです。本書の出版後、2.23系列の正式リリースとなるバージョン3.23.31が、2001年1月17日に出ています。また、その後もバージョンアップが続いていますので、MySQL ABのダウンロードページから最新のバージョンを入手して試してみてみてはいかがでしょうか。なお国内のミラーは、SoftAgencyにあります(2001/02/01)

3.23.33がリリースされました。(2001/02/13)

3.23.38がリリースされています。(2001/05/17)

3.23.40がリリースされています。(2001/08/06)

WindowsでのMySQL+Perl環境の構築(第7章)

第7章はUNIX環境を前提として書かれているため、Windows版のPerl環境については「マニュアルやその他の文献を参考に」することとしています。しかし、WindowsにApcheとMySQLをインストールしてPerlでCGIを動作させたいという要求もあるようですので、WindowsへのPerlやDBD-Mysqlのインストール情報をまとめてみました。

まず、Windows版のPerlはActiveStateに置かれているActivePerlが利用できます。このインストールに関しては、アーク・シンク・タンクのMS-WindowsでPerlのページが参考になります。

これをインストールした後、MySQLを使えるようにするためには、本書137ページで説明されたUNIX版と同様のモジュールをインストールする必要があります(Data-Dumperは、ActivePerlではデフォルトで自動にインストールされるようです)。モジュールのインストールには、以下のようにppm.exeを利用すると便利です。

C:\PERL\> ppm install DBI
C:\PERL\> ppm install DBD-Mysql
C:\PERL\> ppm install Data-ShowTable

なお、WindwosでのPerl&DBI関連に関しては、本書333ページにあるPerlの小技が参考になります。(2001/02/01)

SJISサーバーでのJDBCサンプルの利用(第8章)

第8章では、MySQLサーバーをWindows環境で動作させている方は注意が必要です。

この章では、MySQLサーバーがUNIXプラットフォーム上で、デフォルトの文字セットはEUCとして動作していることを前提に執筆されています。このため、Windowsプラットフォームなど、デフォルトの文字セットがSJISの場合には動作に不具合が発生します(default-character-set=sjisとしている場合は、UNIX環境であっても同様)。

しかし、MySQLサーバーをWindows上で動作させたいという方も数多くいらっしゃるので、第8章のサンプルをデフォルト文字コードがSJISのサーバーに対して実行するためのノウハウや修正点をまとめました。

なお、以下の説明中でダウンロードが必要とされているSJISサーバー向けサンプルや文書などは、第2刷以降の添付CD-ROMではSamples/JDBC/SJIS_serverに追加収録されています。(2001/05/17)

● make_sample_table.sqlなどの実行について(173ページ)

サンプルのデータベースを作成するためのSQLスクリプトmake_sample_table.sqlは、デフォルト文字セットをSJISで実行しているMySQLサーバーに対しては実行できません。これは、make_sample_table.sqlの後半にバイナリの画像データが埋め込まれていることに原因があり、これをデータベースに挿入する箇所でエラーが起きているようです。

また加えて、クライアントが使用するExampleA.jarファイルも文字コードがEUCであることを前提に作られています。

したがって回避策としては、第8章のサンプルを実行する際には、サーバーもクライアントも共にデフォルトの文字セットをEUCとして起動する必要があります。具体的には、引数に--default-character-set=ujisオプションを付けるか、my.ini(UNIX環境の場合はmy.cnf)ファイルでdefault-character-set=ujisと明記します。(2001/02/01 2001/02/14 2001/05/17更新)

● 追記:SJISサーバー向けサンプルを公開します

上記不具合の回避方法が判明したため、第8章の執筆者である鶴長さんにサーバーのデフォルト文字セットがSJISの場合に対応するJDBCサンプルを作成していただきました。MySQLサーバーをWindown環境で動作させている方、またUNIXでもデフォルト文字セットをSJISで利用している方は、このサンプルをお試しください。

置き換えが必要なのは、SJIS版サーバーで動作させる2つのSQL文(make_sample_table.sqlおよびgrant_table.sql)と、このSJISサーバーに対応したコンパイル済みJARファイル(ExampleA.jarおよびExampleB.jar)の4つのファイルです。これらをZIPでアーカイブしたものを用意しました。SJISサーバー用サンプルZIPアーカイブ(JDBC_Samples_for_SJIS_Server.zip)をダウンロードしてください。(2001/02/13 2001/02/14 2001/05/17更新)

● 追記:“SJISサーバー向けExampleA.jar”のコンパイルと実行

188ページから説明されているExampleA(8.5節「Javaアプリケーションのサンプル(その2)」)では、バイナリ(BLOB)データをMySQLサーバーに挿入します。この際、本編で紹介されているMM.MySQL JDBCドライバを使用すると、いくつかのエラーが発生し正常に動作しません。

このためSJISサーバーでは、MM.MySQL JDBCを使用せず、8.8節「その他のMySQL対応JDBCドライバ」(220ページ)で紹介されているGWE mysql JDBC Driver 0.92(高橋智宏さん拡張)を使用します。JDBC Driver for MySQLダウンロードページから、JDBC Driver for MySQL JDBC2.0版をダウンロードしてインストールしてください。ファイル名(gweMysqlJDBC_extra2.zip)からわかるように、ZIP圧縮されています。解凍後、gweMysql.zipをクラスパスに追加すれば、上記のExampleA.jarが実行できます。

続いて、本文の説明に沿ってExampleAをソースコードからコンパイルするには、リスト8.5(189ページ)に掲載したFrameA.javaのJDBCロード部分とデータベースURLを修正する必要があります。修正の詳細は次の「SJISサーバーでExampleAをコンパイル・実行する方法」に従ってください。また修正済みのFrameA.javaソースも置いておきます。

なお、上記のZIPファイル中で配布しているSJISサーバー向けExampleA.jarには、既に高橋さんのJDBCが組み込まれた形でパックされていますので、ダブルクリックするだけで使用できるかと思います。(2001/02/23 2001/05/17更新)

環境変数LD_RUN_PATHの具体的な設定方法(96ページ)

MySQL/Rubyのインストール時にtest.rbでエラーが出る場合の対策について補足します。本文では2つの方法(環境変数LD_RUN_PATHまたは環境変数LD_LIBRARY_PATH)が述べられていますが、このうちmake時に一時的にLD_RUN_PATHを指定する方法が、モジュール使用時にもいちいち手間をかける必要がないのでお勧めです。具体的には、makeを次のように実行します。

% env LD_RUN_PATH=/usr/local/lib/mysql make

なお、/usr/local/lib/mysqlには、libmysqlclient.soファイルが存在する場所へのパスを記述してください。(2001/01/17)


補足と訂正

Perlサンプルにおけるexecute返り値の判定の不具合(第7章)

第7章のリスト7.10に示したmemberadm(150ページ)とリスト7.12のbbord.cgi(154ページ)に、また不具合が発見されました。IDやパスワードのチェックを行うSELECT文の判定方法に不具合があり、常にチェックがエラーになってしまうというものです。ご迷惑をおかけして、まことに申しわけありませんでした。

対策としては、SELECT文を実行しているexecuteの返り値判定(計3カ所)を、次のパッチのように修正してください。

diff -cr Perl.old/bboard.cgi Perl/bboard.cgi
*** Perl.old/bboard.cgi Mon Aug  6 12:35:44 2001
--- Perl/bboard.cgi     Mon Aug  6 12:36:17 2001
***************
*** 147,153 ****
  sub check_id {
    my($id, $url) = @_;
    my $sth = $mydb->prepare("SELECT 1 FROM member WHERE id='$id'");
!   if ($sth->execute == 0) {
      error ('この ID は会員登録されていません', $url);
    }
  }
--- 147,154 ----
  sub check_id {
    my($id, $url) = @_;
    my $sth = $mydb->prepare("SELECT 1 FROM member WHERE id='$id'");
!   $sth->execute;
!   if ($sth->rows == 0) {
      error ('この ID は会員登録されていません', $url);
    }
  }
***************
*** 160,166 ****
    $idq = $mydb->quote($id);
    $pq = $mydb->quote($passwd);
    $sth = $mydb->prepare("SELECT 1 FROM member WHERE id=$idq AND passwd=$pq");
!   if ($sth->execute == 0) {
      error ('パスワードが間違っています', $url);
    }
    $sth->finish;
--- 161,168 ----
    $idq = $mydb->quote($id);
    $pq = $mydb->quote($passwd);
    $sth = $mydb->prepare("SELECT 1 FROM member WHERE id=$idq AND passwd=$pq");
!   $sth->execute;
!   if ($sth->rows == 0) {
      error ('パスワードが間違っています', $url);
    }
    $sth->finish;
diff -cr Perl.old/memberadm Perl/memberadm
*** Perl.old/memberadm  Mon Aug  6 12:35:44 2001
--- Perl/memberadm      Mon Aug  6 12:36:17 2001
***************
*** 61,67 ****
  elsif ($command eq 'list') {
    usage() if (@ARGV != 0);
    $sth = $db->prepare("SELECT id,name,email,passwd FROM member");
!   $num = $sth->execute;
    for ($i=0; $i<$num; $i++) {
      ($id, $name, $email, $passwd) = $sth->fetchrow_array;
      printf "%s %s %s %s\n", $id, $name, $email, $passwd;
--- 61,68 ----
  elsif ($command eq 'list') {
    usage() if (@ARGV != 0);
    $sth = $db->prepare("SELECT id,name,email,passwd FROM member");
!   $sth->execute;
!   $num = $sth->row;
    for ($i=0; $i<$num; $i++) {
      ($id, $name, $email, $passwd) = $sth->fetchrow_array;
      printf "%s %s %s %s\n", $id, $name, $email, $passwd;

修正済みのコードも用意してありますので、ダウンロードしてお使いください(mysql-book-4ed-perl-samples.tar.gz)。なお、このコードには下記5月17日付けの不具合への修正も含まれています。(2001/08/06)

第7章のPerlサンプルにおけるstrict使用の不具合

第7章のリスト7.10に示したmemberadm(150ページ)とリスト7.12のbbord.cgi(154ページ)では、安全のためstrictモジュールを使用するようになっていますが、このコーディングが不完全であったため、実際には動作しないスクリプトとなっていました。これは、そもそもstrictモジュール無しで組んだコードに、後から組み込もうとしたものの、テストが不十分であったことによります。

対処方法としては、サンプルプログラムの以下の行を削除し、strictモジュールを使用しないコードに修正してください。

  • リスト7.10(150ページ)の2行目4行目
  • リスト7.12(154ページ)の2行目5行目

なお、このPerlサンプルの不具合は第3刷り以降で本文およびCD-ROMともに修正されています。修正済みのコードについては、上記の8月6日付けの配布アーカイブをご利用ください。ご迷惑をおかけして、まことに申しわけありませんでした。(2001/05/17 2001/08/06更新)

第8章のコンパイル済みJARファイル

第8章の動作確認(174ページなど)に必要なコンパイル済みJARファイル(ExampleA.jarファイルExampleB.jarファイル)が、添付CD-ROMに収録されていません。申しわけありませんでした。下記からダウンロードしてください。(2001/01/17 2001/02/14更新)

  • ExampleA.jarファイルのダウンロード(ExampleA.jar)
  • ExampleB.jarファイルのダウンロード(ExampleB.jar)

追記:上記のファイルは、MySQLサーバーがデフォルト文字コードEUCで動作している場合に、ご利用いただけます。MySQLサーバーの文字コードがSJISの場合は、2001年2月13日付け補足記事にしたがって、SJISサーバー向けサンプルをダウンロードしてください。(2001/02/14)

第2刷以降の添付CD-ROMでは、上記のファイルもSamples/JDBC/applicationに収録されています。(2001/05/17)

リスト5.6(76ページ)およびcreate_db.sql(添付CD-ROM)

リスト5.6「メーリングリスト管理用データベース」中に誤植があります。下記のようにTINYとINTの間にスペースは入らず、TINYINTと1語になります。申しわけありませんでした。

誤: admin TINY INT

正: admin TINYINT

またこのリストは添付CD-ROMのSamples/PHPディレクトリcreate_db.sqlファイルとして収録されていますが、これも訂正が必要です。正しいファイルはここ(create_db.sql)から入手できます。(2001/01/16)

第2刷以降の本文および添付CD-ROMでは、上記の誤植は修正されています。(2001/05/17)

toymodel2.plファイル(78ページ)

添付CD-ROMにtoymodel2.plファイルが収録されていません。ここ(toymodel2.pl)から入手してください。申しわけありませんでした。(2001/01/16)

第2刷以降の添付CD-ROMでは、toymodel2.plファイルはSamples/PHPに収録されています。(2001/05/17)

“Ruby 1.6.1+MySQL for Windows”バイナリ

添付CD-ROMのSoftAgency/Windows/ruby/1.6.1に収録したmysql-ruby-2.3.1-msc.zipに不具合がありました。修正されたものが、SoftAgencyのウェブサイト、またはここ(mysql-ruby-2.3.1-msc.zip)から入手できます。(2000/12/19)

第2刷以降の添付CD-ROMでは、修正されたものに差し替えています。(2001/05/17)


戻る