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= |
警告 | 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_FORMAT
が COMPRESSED
として指定されているか、省略されている場合にのみ許可されます。その他の ROW_FORMAT
とともに KEY_BLOCK_SIZE
を指定すると、SHOW WARNINGS
を使用して表示できる警告が生成されます。ただし、テーブルは非圧縮です。つまり、指定された KEY_BLOCK_SIZE
は無視されます。
レベル | コード | メッセージ |
---|---|---|
警告 | 1478 | InnoDB: ignoring KEY_BLOCK_SIZE= |
innodb_strict_mode
が有効になっている状態で実行している場合は、COMPRESSED
以外の任意の ROW_FORMAT
と KEY_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= |
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_mode
が OFF
の場合、MySQL によってテーブルが作成または変更されますが、次に示すように特定の設定は無視されます。警告メッセージは、MySQL エラーログで確認できます。innodb_strict_mode
が ON
の場合、このような特定のオプションの組み合わせでエラーが生成され、テーブルは作成または変更されません。エラー状況の完全な説明を参照するには、次に示すように、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 =Barracuda と innodb_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 |
REDUNDANT 、COMPACT 、または DYNAMIC 行フォーマットを使用して KEY_BLOCK_SIZE が指定されている |
KEY_BLOCK_SIZE が無視されます。 |
REDUNDANT 、COMPACT 、または DYNAMIC
|
ROW_FORMAT が REDUNDANT 、COMPACT 、DYNAMIC 、または COMPRESSED のいずれでもない |
MySQL パーサーで認識される場合は無視されます。その他の場合は、エラーが発行されます。 |
COMPACT または該当なし |
innodb_strict_mode
が ON
の場合、MySQL では無効な ROW_FORMAT
または KEY_BLOCK_SIZE
パラメータが拒否されます。以前のバージョンの MySQL との互換性を保つために、厳密モードはデフォルトで有効になっていません。その代わりに、MySQL では、無視された無効なパラメータに対応した警告 (エラーではない) が発行されます。
SHOW TABLE STATUS
を使用しても、選択した KEY_BLOCK_SIZE
を表示できないことに注意してください。SHOW CREATE TABLE
ステートメントでは、(テーブルの作成時に無視された場合でも) KEY_BLOCK_SIZE
が表示されます。テーブルの実際の圧縮済みページサイズは、MySQL では表示できません。