MySQL は場合によって、カラム指定を CREATE TABLE
または ALTER TABLE
ステートメントで指定されたものから暗黙のうちに変更することがあります。 これらの変更は、データ型、データ型に関連付けられた属性、またはインデックス指定に対して行われる可能性があります。
すべての変更は 65,535 バイトの内部の行サイズ制限に従うため、データ型を変更しようとする一部の試みが失敗する可能性があります。 セクション8.4.7「テーブルカラム数と行サイズの制限」を参照してください。
PRIMARY KEY
の一部であるカラムは、そのように宣言されていない場合でも、NOT NULL
にされます。テーブルが作成されたとき、
ENUM
およびSET
メンバー値から末尾のスペースが自動的に削除されます。MySQL は、ほかの SQL データベースベンダーによって使用されている特定のデータ型を MySQL 型にマップします。 セクション11.9「その他のデータベースエンジンのデータ型の使用」を参照してください。
特定のストレージエンジンには許可されないインデックスタイプを指定するために
USING
句を含めたが、そのエンジンがクエリー結果に影響を与えることなく使用できる使用可能な別のインデックスタイプが存在する場合、エンジンはその使用可能なタイプを使用します。厳密な SQL モードが有効になっていない場合、長さ指定が 65535 より大きい
VARCHAR
カラムはTEXT
に変換され、長さ指定が 65535 より大きいVARBINARY
カラムはBLOB
に変換されます。 そうでない場合は、これらのいずれの場合にもエラーが発生します。-
文字データ型に
CHARACTER SET binary
属性を指定すると、カラムは対応するバイナリデータ型として作成されます。つまり、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 を使用してテーブルを圧縮する場合は、その他の特定のデータ型の変更が発生する場合があります。 セクション16.2.3.3「圧縮テーブルの特徴」を参照してください。