MySQL 8.0 リファレンスマニュアル


13.1.20.7 暗黙のカラム指定の変更

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 属性を指定すると、カラムは対応するバイナリデータ型として作成されます。つまり、CHARBINARY になり、VARCHARVARBINARY になり、TEXTBLOB になります。 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「圧縮テーブルの特徴」を参照してください。


関連キーワード:  ステートメント, CREATE, TABLE, DROP, カラム, サブクエリー, テーブル, FUNCTION, SLAVE, 変更