Documentation Home

13.1.17.6 静默列规范更改

CREATE TABLE在某些情况下,MySQL 会悄悄地更改or ALTER TABLE语句 中给出的列规范。这些可能是对数据类型、与数据类型关联的属性或索引规范的更改。

所有更改均受 65,535 字节的内部行大小限制的约束,这可能会导致某些数据类型更改尝试失败。请参阅第 8.4.7 节,“表列数和行大小的限制”

  • 即使没有以这种方式声明, 也会创建 属于 aPRIMARY KEY 的列。NOT NULL

  • ENUM创建表时, 尾随空格会自动从SET成员值 中删除 。

  • MySQL 将其他 SQL 数据库供应商使用的某些数据类型映射到 MySQL 类型。请参阅 第 11.8 节,“使用来自其他数据库引擎的数据类型”

  • 如果您包含一个USING子句来指定给定存储引擎不允许的索引类型,但引擎可以使用另一种索引类型而不影响查询结果,则该引擎将使用可用类型。

  • 如果不开启严格SQL模式, VARCHAR长度规范大于65535 TEXT的列转换为 , VARBINARY长度规范大于65535的列转换为 BLOB。否则,在这两种情况中的任何一种情况下都会发生错误。

  • 指定CHARACTER SET binary 字符数据类型的属性会导致将列创建为相应的二进制数据类型: CHAR成为 BINARYVARCHAR成为 VARBINARYTEXT成为 BLOB。对于 ENUMand 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 是否使用了您指定的数据类型以外的数据类型,请在创建或更改表后 发出DESCRIBEor 语句。SHOW CREATE TABLE

如果您使用myisampack压缩表,则可能会发生某些其他数据类型更改。请参阅 第 15.2.3.3 节,“压缩表特征”