MySQL バージョン 3.23 は、新しい
MyISAM
型と以前の
ISAM
型のテーブルをサポートします。バージョン
3.23
で以前のテーブルを使用する場合に、それらのテーブルを変換する必要はありません。デフォルトでは、新しいテーブルはすべて、MyISAM
型で作成されます(ただし、--default-table-type=isam
オプションを指定して mysqld
を起動した場合を除きます)。ISAM
テーブルは、ALTER TABLE table_name
TYPE=MyISAM
または Perl スクリプト
mysql_convert_table_format
を使用して
MyISAM
形式に変換することができます。
バージョン 3.22 および 3.21 のクライアントは、バージョン 3.23 サーバと支障なく連携して動作します。
以下では、バージョン 3.23 にアップグレードするときに注意する必要のある事項について説明します。
tis620
キャラクタセットを使用するテーブルはすべて、myisamchk
-r
または REPAIR TABLE
で修復する必要がある。
シンボリックにリンクされたデータベースに
DROP DATABASE
を実行した場合、リンクと元のデータベースの両方が削除される(3.22
では、configure
は
readlink()
システムコールの使用可能性を検出しないので、これは行われなかった)。
OPTIMIZE TABLE
は、MyISAM
テーブルのみに対応するようになった。
これ以外のテーブル型のテーブルを最適化するには、ALTER
TABLE
を使用する。 OPTIMIZE
TABLE
の実行中は、他のスレッドに使用されるのを防ぐためにテーブルがロックされるようになった。
MySQL クライアント mysql
は、デフォルトで --no-named-commands
(-g)
を指定して起動されるようになった。このオプションは、--enable-named-commands
(-G)
を指定して無効にすることができる。場合によって、これによって非互換性の問題が発生することがある(セミコロンなしの名前付きコマンドを使用する
SQL スクリプトなどの場合)。第 1
行目のロング形式のコマンドは引き続き有効である。
日付の部分を処理する日付関数(MONTH()
など)は、0000-00-00
日付の場合に 0 を返すようになった(MySQL
3.22 では、これらの関数は NULL
を返していた)。
ISAM
テーブルに
german
文字ソート順序を使用している場合は、isamchk
-r
を使用してそれらのテーブルを修復する必要がある。これは、このソート順序にいくつかの変更が加えられたためである。
IF()
のデフォルトの戻り値の型は、最初の引数のみに依存するのではなく、両方の引数に依存するようになった。
AUTO_INCREMENT
カラムを使用して負の数を格納しないようにする。負の数を格納した場合に、-1
から 0
にラップするときに問題が発生したためである。AUTO_INCREMENT
カラムには 0
を格納してはならない。CHECK
TABLE
は、0 値に対して警告を返す。0
値はテーブルをダンプしてリストアした場合に、変化することがあるためである。MyISAM
テーブルの AUTO_INCREMENT
は、より低いレベルで処理されるようになり、以前よりもかなり高速になっている。さらに、MyISAM
テーブルでは、テーブルからレコードを削除した場合でも、古い番号は再利用されなくなった。
CASE
、DELAYED
、ELSE
、END
、FULLTEXT
、INNER
、RIGHT
、THEN
、および
WHEN
は予約語になった。
FLOAT(X)
は、真の浮動小数点型になり、小数部の桁数が固定された値でなくなった。
DECIMAL(length,dec)
型を使用してカラムを宣言するときに、length
引数に符号と小数点の位置が含まれなくなった。
TIME
文字列は、以下のいずれかの形式にしなければならなくなった。
[[[DAYS] [H]H:]MM:]SS[.fraction]
または
[[[[[H]H]H]H]MM]SS[.fraction]
。
LIKE
は、=
演算子の場合と同じ文字比較ルールを使用して文字列を比較するようになった。旧バージョンの動作が必要な場合は、CXXFLAGS=-DLIKE_CMP_TOUPPER
フラグを指定して MySQL をコンパイルする。
REGEXP
は、どちらの文字列もバイナリ文字列でない場合はケース非依存になった。
MyISAM
(.MYI
)テーブルをチェックまたは修復する場合は、CHECK
TABLE
ステートメントまたは
myisamchk
コマンドを使用する必要がある。ISAM
(.ISM
)テーブルの場合は、isamchk
コマンドを使用する。
mysqldump
ファイルに MySQL
バージョン 3.22 とバージョン 3.23
の間の互換性を持たせたい場合は、mysqldump
に --opt
オプションまたは
--all
オプションを指定しない。
DATE_FORMAT()
へのすべてのコールをチェックして、各書式文字の前に
‘%
’
があることを確認する (MySQL バージョン 3.22
以降で、この構文はすでに許可されている)。
mysql_fetch_fields_direct()
は関数になり(これまではマクロ)、MYSQL_FIELD
の代わりに MYSQL_FIELD
へのポインタを返すようになった。
mysql_num_fields()
は、MYSQL*
オブジェクトに対して使用できなくなった(引数として
MYSQL_RES*
値をとる関数になった)。MYSQL*
オブジェクトには、代わりに
mysql_field_count()
を使用する。
MySQL バージョン 3.22 では、SELECT DISTINCT
...
の出力は、ほとんどの場合ソートされた。バージョン
3.23
では、ソートされた出力を取得するには、GROUP
BY
または ORDER BY
を使用する必要がある。
SUM()
は、一致するレコードがない場合に 0
の代わりに NULL
を返すようになった。これは、SQL-99
に対応したものである。
NULL
値を持つ AND
または OR
は、0 の代わりに
NULL
を返すようになった。これは、主に、NOT
NULL
= NULL
のように、AND/OR
式で
NOT
を使用するクエリに影響を及ぼす。
LPAD()
および
RPAD()
は、結果の文字列が length
引数より長い場合に、その文字列を短くするようになった。
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.