Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Silent Column Specification Changes

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