MySQL 4.0 と MySQL 4.1 では、重大なバグを修正し、MySQL と ANSI SQL 標準との互換性を向上させるためにいくつかの目立つ動作が変更されています。これらの変更は、アプリケーションに影響を及ぼすことがあります。
一部の 4.1 の動作は、完全に 4.1
にアップグレードする前に 4.0
でテストすることができます。比較的最近の
MySQL 4.0 リリース(4.0.12
以降)には、mysqld
用の
--new
起動オプションが追加されています。
このオプションを使用すると、最も重大な変更が行われた
4.1 の動作が提供されます。 SET
@@new=1
コマンドを使用して特定のクライアント接続に対してこれらの動作を有効にしたり、有効になっている場合は
SET @@new=0
コマンドを使用して無効にすることができます。
4.1
の変更点によって影響を受けると思われる場合は、4.1
にアップグレードする前に、最新の MySQL 4.0
バージョンをダウンロードして、設定ファイルに以下を追加し、--new
オプションを指定してその MySQL
を実行することをお勧めします。
[mysqld-4.0] new
このようにすれば、4.0
上で、新しい機能を動作させて、アプリケーションがそれらと連携して正常に機能するかどうかを、確認することができます。これは、4.1
以降への完全アップグレードを行うときに、苦労せずにスムーズに移行するのに役に立ちます。上記の方法でこれを行うと、誤って
--new
オプションを指定して 4.1
バージョンを実行することはありません。
以下では、アプリケーションに影響を及ぼす可能性のある変更点や、バージョン 4.1 にアップグレードするときに注意する必要のある変更点について説明します。
TIMESTAMP
は、'YYYY-MM-DD
HH:MM:SS'
形式の文字列として返されるようになった(4.0.12
以降では、--new
オプションを使用してこの点に関して 4.1
のように動作させることができる)。バージョン
4.0
のように値を数値として返すようにする場合は、TIMESTAMP
カラムを取得するときに、それらのカラムに
+0 を追加する。
mysql> SELECT ts_col + 0 FROM tbl_name;
TIMESTAMP
カラムの桁数指定のサポートは中止された。
たとえば、カラムを TIMESTAMP(10)
と宣言しても、(10)
は無視される。
これらの変更は、標準 SQL に準拠するために必要であった。今後のバージョンで、さらに変更が行われ(この変更と下位互換性がある)、タイムスタンプ長で秒の小数部の桁数を必要なだけ指定できるようになる予定。
0xFFDF
などのバイナリ値は、数値ではなく文字列であると見なされるようになった。これによって、文字列をバイナリ値として入力するのが便利なキャラクタセットのいくつかの問題が修正される。この変更では、バイナリ値を整数として数値比較する場合は、以下のように
CAST()
を使用する必要がある。
mysql> SELECT CAST(0xFEFF AS UNSIGNED INTEGER) < CAST(0xFF AS UNSIGNED INTEGER);
-> 0
CAST()
を使用しないと、以下のように文字列比較が行われる。
mysql> SELECT 0xFEFF < 0xFF;
-> 1
数値コンテキストでのバイナリ項目の使用や、=
演算子を使用したバイナリ項目の比較は、従来どおりに機能する(4.0.13
以降では、--new
オプションを使用してこの点に関して 4.1
のように動作させることができる)。
DATE
値、DATETIME
値、または TIME
値を生成する関数の場合、クライアントに返される結果は時間の持つ型に修正されている。たとえば、MySQL
4.1 では、以下のような結果が返される。
mysql>SELECT CAST("2001-1-1" as DATETIME);
->'2001-01-01 00:00:00'
MySQL 4.0 では、以下のように異なる結果が返される。
mysql>SELECT CAST("2001-1-1" as DATETIME);
->'2001-01-01'
AUTO_INCREMENT
カラムに
DEFAULT
値を指定できなくなった(4.0 では
DEFAULT
値は自動的に無視される。4.1
ではエラーが発生する)。
LIMIT
は負の引数を受け付けなくなった。 -1
の代わりに 18446744073709551615 を使用する。
SERIALIZE
は、sql_mode
変数の有効なオプション値ではなくなった。代わりに、SET
TRANSACTION ISOLATION LEVEL SERIALIZABLE
を使用する。SERIALIZE
は、mysqld
の
--sql-mode
オプションとしても有効ではなくなった。代わりに、--transaction-isolation=SERIALIZABLE
を使用する。
すべてのテーブルと文字列カラムがキャラクタセットを持つようになった。
See 章 9. 各国キャラクタセットと Unicode。
キャラクタセット情報は、SHOW CREATE
TABLE
と mysqldump
によって表示される (MySQL バージョン 4.0.6
以降は、新しいダンプファイルを読み取ることはできる。これより前のバージョンは、新しいダンプファイルを読み取ることはできない)。
4.1 では、.frm
ファイルで使用されるテーブル定義形式が少し変更されている。4.0.11
以降の MySQL 4.0 バージョンは、この新しい
.frm
形式を直接読読み取ることができるが、これより前のバージョンは新しい形式を読み取ることはできない。
バージョン 4.1 のテーブルを 4.0.11
より前のバージョンに移動する必要がある場合は、mysqldump
を使用する。 See 項4.9.7. 「mysqldump
(テーブル構造とデータのダンプ)」。
同一の Windows
マシン上で複数のサーバを実行する場合は、すべてのマシン上で異なる
--shared_memory_base_name
オプションを使用する必要がある。
UDF
関数へのインタフェースが少し変更された。集約関数
XXX()
ごとに
xxx_clear()
関数を宣言しなければならなくなった。
一般に、以前の MySQL バージョンから 4.1 にアップグレードする場合は、以下のステップを実行する必要がある。
前述の変更点をチェックして、使用しているアプリケーションに影響を及ぼすような変更があるかどうかを確認する。
項D.2. 「Changes in release 4.1.x (Alpha)」 を読んで、4.1 で使用できる重要な新機能を確認する。
Windows 上で MySQL サーバを実行する場合は、項2.5.8. 「Windows 上での MySQL のアップグレード」 も参照。
アップグレード後に、パスワードを安全に処理するために必要な、長くなった新しい
Password
カラムを生成するように権限テーブルを更新する。テーブルの更新は、mysql_fix_privilege_tables
を使用して行う。手順については、項2.5.6. 「権限テーブルのアップグレード」
を参照。
4.1 では、より強力なセキュリティを実現するようにパスワードのハッシュメカニズムが変更されています。ただし、4.0 以前のクライアントライブラリを使用するクライアントがある場合に、互換性の問題が発生することがあります(4.1 にアップグレードされていないリモートホストからクライアントが接続するような状況では 4.0 クライアントがある可能性が非常に高いです)。考えられるいくつかのアップグレード方針を以下に示します。旧バージョンのクライアントとの互換性の目標とセキュリティの目標の間でさまざまなトレードオフが存在します。
4.1 にアップグレードしない。動作は変化しないが、当然ながら 4.1 クライアント/サーバプロトコルによって提供される新機能も一切使用できない(MySQL 4.1 には、プリペアドステートメントや複数結果セットなどの機能を提供する拡張クライアント/サーバプロトコルが組み込まれている)。 See 項11.1.4. 「C API のプリペアドステートメント」。
4.1
にアップグレードして、mysql_fix_privilege_tables
スクリプトを実行して、長いパスワードハッシュを格納できるように
user
テーブルの
Password
カラムを拡張する。ただし、--old-passwords
オプションを指定してサーバを実行して、4.1
より前のバージョンのクライアントが引き続き短いハッシュのクライアントアカウントに接続できるようにして下位互換性を実現する
すべてのクライアントが 4.1
にアップグレードされたら、最終的に
--old-passwords
サーバオプションの使用を中止できるまた、MySQL
アカウントのパスワードを、より安全で新しい形式を使用するように変更することもできる
4.1
にアップグレードして、mysql_fix_privilege_tables
スクリプトを実行して、user
テーブルの Password
カラムを拡張する。すべてのクライアントが
4.1
にアップグレードされていることがわかっている場合は、--old-passwords
オプションを指定しないでサーバを実行する。代わりに、既存のすべてのアカウントのパスワードを、新しい形式を持つように変更する。純粋な
4.1 インストールが最も安全である。
クライアント認証とパスワード変更操作に関係するパスワードハッシュの予備知識については、項4.3.11. 「MySQL 4.1 のパスワードハッシュ」 を参照してください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.