文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  静默列规范更改

15.1.20.7 静默列规范更改

在某些情况下,MySQL 会静默更改 CREATE TABLEALTER TABLE 语句中提供的列规范。这些可能是对数据类型、与数据类型关联的属性或索引规范的更改。

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

  • 作为 PRIMARY KEY 部分的列即使没有声明也会被设为 NOT NULL

  • 创建表时,ENUMSET 成员值的尾部空格会自动删除。

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

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

  • 如果未启用严格 SQL 模式,则长度指定大于 65535 的 VARCHAR 列将转换为 TEXT,长度指定大于 65535 的 VARBINARY 列将转换为 BLOB。否则,在这两种情况下都会发生错误。

  • 为字符数据类型指定 CHARACTER SET binary 属性会导致该列被创建为相应的二进制数据类型:CHAR 变为 BINARYVARCHAR 变为 VARBINARYTEXT 变为 BLOB。对于 ENUMSET 数据类型,不会发生这种情况;它们将按声明创建。假设您使用此定义指定了一个表

    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 是否使用了与您指定的不同的数据类型,请在创建或更改表后发出 DESCRIBESHOW CREATE TABLE 语句。

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