いくつかのケースでは、MySQL は
CREATE TABLE
か ALTER TABLE
ステートメント内で与えられたカラム仕様を静かに変更します。これらは、データ型、データ型に関連する属性、またはインデックス仕様にとっての変更になります。
TIMESTAMP
表示サイズは廃棄されます。
また、TIMESTAMP
カラムが、デフォルトでは
NOT NULL
であることにも注意してください。
PRIMARY KEY
の一部であるカラムは、そのように宣言されなくても
NOT NULL
にされます。
テーブルが作成されたとき、ENUM
と SET
メンバー値から末尾のスペースが自動的に削除されます。
MySQL はほかの SQL データベースベンダーに利用された特定のデータ型を MySQL 型にマップします。項6.7. 「その他のデータベースエンジンのデータ型の利用」 を参照してください。
もし規定のストレージエンジンに対して正当ではないインデックス型を指定するために
USING
を含み、しかしクエリーに影響を与えずにそのエンジンが利用できる別の有効なインデックス型が存在すれば、エンジンはその有効な型を利用します。
厳密な SQL
モードが有効になっていない場合、長さ指定が
65535 より大きい
VARCHAR
カラムは
TEXT
に変換され、長さ指定が 65535 より大きい
VARBINARY
カラムは
BLOB
に変換されます。そうでない場合は、これらのいずれの場合にもエラーが発生します。
文字データ型に CHARACTER
SET
バイナリ属性を指定すると、カラムは対応するバイナリデータ型として作成されます。つまり、CHAR
は BINARY
になり、VARCHAR
は
VARBINARY
になり、TEXT
は BLOB
になります。ENUM
および
SET
データ型では、この処理は行われず、宣言されたとおりに作成されます。この定義を使用して、テーブルを指定したとします。
CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );
結果のテーブルには、この定義が含まれています。
CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary );
MySQL
が、指定したデータ型以外のものを利用したかどうかを確認するためには、テーブルを作成、または変更したあとに
DESCRIBE
か
SHOW CREATE
TABLE
ステートメントを発行してください。
もし myisampack を利用してテーブルを圧縮すると、特定のほかのデータ型の変更を行うことができます。Compressed Table Characteristics を参照してください。