Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


14.7.7 SQL 圧縮構文の警告とエラー

Barracuda ファイル形式が有効になっていない場合に、CREATE TABLE または ALTER TABLE ステートメントで ROW_FORMAT=COMPRESSED または KEY_BLOCK_SIZE を指定すると、次のような警告が生成されます。SHOW WARNINGS ステートメントを使用すると、これらを表示できます。

レベル コード メッセージ
警告 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
警告 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format=1
警告 1478 InnoDB: ignoring KEY_BLOCK_SIZE=4.
警告 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
警告 1478 InnoDB: assuming ROW_FORMAT=COMPACT.

注:

  • デフォルトでは、これらのメッセージはエラーではなく、単なる警告です。テーブルは、オプションを指定しなかった場合と同様に、圧縮なしで作成されます。

  • innodb_strict_mode を有効にすると、MySQL では、このような場合に警告ではなく、エラーが生成されます。現在の構成では圧縮テーブルの使用が許可されていないため、テーブルは作成されません。

厳密でない動作を使用すると、ソースデータベースに圧縮テーブルが含まれていない場合でも、圧縮テーブルがサポートされていないデータベースに mysqldump ファイルをインポートできます。この場合、MySQL は操作を回避する代わりに、ROW_FORMAT=COMPACT 内にテーブルを作成します。

新しいデータベースにダンプファイルをインポートし、元のデータベース内に存在するときにテーブルが再作成されるようにするには、サーバーで innodb_file_format および innodb_file_per_table 構成パラメータが適切に設定されていることを確認します。

KEY_BLOCK_SIZE 属性は、ROW_FORMATCOMPRESSED として指定されているか、省略されている場合にのみ許可されます。その他の ROW_FORMAT とともに KEY_BLOCK_SIZE を指定すると、SHOW WARNINGS を使用して表示できる警告が生成されます。ただし、テーブルは非圧縮です。つまり、指定された KEY_BLOCK_SIZE は無視されます。

レベル コード メッセージ
警告 1478 InnoDB: ignoring KEY_BLOCK_SIZE=n unless ROW_FORMAT=COMPRESSED.

innodb_strict_mode が有効になっている状態で実行している場合は、COMPRESSED 以外の任意の ROW_FORMATKEY_BLOCK_SIZE を組み合わせると警告ではなく、エラーが生成され、テーブルは作成されません。

表14.2「CREATE TABLE および ALTER TABLE オプションの意味」では、CREATE TABLE および ALTER TABLE 上でさまざまなオプションが処理される方法が要約されています。

表 14.2 CREATE TABLE および ALTER TABLE オプションの意味

オプション 使用法 説明
ROW_FORMAT=​REDUNDANT MySQL 5.0.3 よりも前で使用されていたストレージフォーマット ROW_FORMAT=COMPACT よりも効率性が低く、下位互換性を保つためのものです。
ROW_FORMAT=​COMPACT MySQL 5.0.3 以降でのデフォルトのストレージフォーマット クラスタ化されたインデックスページに、768 バイトの長いカラム値のプリフィクスが格納され、残りのバイトはオーバーフローページに格納されます。
ROW_FORMAT=​DYNAMIC innodb_file​_format=Barracuda とともにのみ使用可能 クラスタ化されたインデックスページ内に収まる場合は、そのページ内に値が保存されます。収まらない場合は、オーバーフローページへの 20 バイトのポインタのみが (プリフィクスなしで) 格納されます。
ROW_FORMAT=​COMPRESSED innodb_file​_format=Barracuda とともにのみ使用可能 zlib を使用してテーブルおよびインデックスをデフォルトの圧縮済みページサイズの 8K バイトに圧縮します。暗黙的に ROW_FORMAT=DYNAMIC を示します。
KEY_BLOCK_​SIZE=n innodb_file​_format=Barracuda とともにのみ使用可能 1、2、4、8、または 16K バイトの圧縮済みページサイズを指定します。暗黙的に ROW_FORMAT=DYNAMIC および ROW_FORMAT=COMPRESSED を示します。

表14.3「InnoDB 厳密モードがオフになっているときの CREATE/ALTER TABLE の警告とエラー」では、CREATE TABLE または ALTER TABLE ステートメント上で、構成パラメータとオプションの特定の組み合わせで発生するエラー状況、およびオプションが SHOW TABLE STATUS の出力に表示される方法について簡単に説明しています。

innodb_strict_modeOFF の場合、MySQL によってテーブルが作成または変更されますが、次に示すように特定の設定は無視されます。警告メッセージは、MySQL エラーログで確認できます。innodb_strict_modeON の場合、このような特定のオプションの組み合わせでエラーが生成され、テーブルは作成または変更されません。エラー状況の完全な説明を参照するには、次に示すように、SHOW ERRORS ステートメントを発行します。

mysql> CREATE TABLE x (id INT PRIMARY KEY, c INT)

-> ENGINE=INNODB KEY_BLOCK_SIZE=33333;

ERROR 1005 (HY000): Can't create table 'test.x' (errno: 1478)

mysql> SHOW ERRORS;
+-------+------+-------------------------------------------+ 
| Level | Code | Message                                   | 
+-------+------+-------------------------------------------+ 
| Error | 1478 | InnoDB: invalid KEY_BLOCK_SIZE=33333.     | 
| Error | 1005 | Can't create table 'test.x' (errno: 1478) | 
+-------+------+-------------------------------------------+ 

2 rows in set (0.00 sec)

表 14.3 InnoDB 厳密モードがオフになっているときの CREATE/ALTER TABLE の警告とエラー

構文 警告またはエラーの状況 結果として SHOW TABLE STATUS に表示される ROW_FORMAT
ROW_FORMAT=REDUNDANT なし REDUNDANT
ROW_FORMAT=COMPACT なし COMPACT
ROW_FORMAT=COMPRESSED または ROW_FORMAT=DYNAMIC、または KEY_BLOCK_SIZE が指定されている innodb_file_format=Barracudainnodb_file_per_table の両方が有効になっていなければ無視されます。 COMPACT
無効な KEY_BLOCK_SIZE (1、2、4、8、または 16 以外) が指定されている KEY_BLOCK_SIZE が無視されます。 リクエストされたもの、または COMPACT (デフォルト)
ROW_FORMAT=COMPRESSED および有効な KEY_BLOCK_SIZE が指定されている なし。デフォルトの 8K ではなく、指定された KEY_BLOCK_SIZE が使用されます。 COMPRESSED
REDUNDANTCOMPACT、または DYNAMIC 行フォーマットを使用して KEY_BLOCK_SIZE が指定されている KEY_BLOCK_SIZE が無視されます。 REDUNDANTCOMPACT、または DYNAMIC
ROW_FORMATREDUNDANTCOMPACTDYNAMIC、または COMPRESSED のいずれでもない MySQL パーサーで認識される場合は無視されます。その他の場合は、エラーが発行されます。 COMPACT または該当なし

innodb_strict_modeON の場合、MySQL では無効な ROW_FORMAT または KEY_BLOCK_SIZE パラメータが拒否されます。以前のバージョンの MySQL との互換性を保つために、厳密モードはデフォルトで有効になっていません。その代わりに、MySQL では、無視された無効なパラメータに対応した警告 (エラーではない) が発行されます。

SHOW TABLE STATUS を使用しても、選択した KEY_BLOCK_SIZE を表示できないことに注意してください。SHOW CREATE TABLE ステートメントでは、(テーブルの作成時に無視された場合でも) KEY_BLOCK_SIZE が表示されます。テーブルの実際の圧縮済みページサイズは、MySQL では表示できません。


User Comments
Sign Up Login You must be logged in to post a comment.