文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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

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 节,“压缩表特性”