Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

15.1.20.7 静默列规范更改

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

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

  • 作为PRIMARY KEY的一部分的列将被强制设置为NOT NULL,即使没有明确声明。

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

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

  • 如果在使用USING子句指定的索引类型不是某个存储引擎允许的类型,但该引擎可以使用另一个可用的索引类型而不影响查询结果,该引擎将使用可用的类型。

  • 如果不启用严格 SQL 模式,VARCHAR列的长度指定大于 65535 将被转换为TEXTVARBINARY列的长度指定大于 65535 将被转换为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节,“压缩表特征”