Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.