13.1.18.6 静默色谱柱规格变更

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

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

  • 即使不是以这种方式声明,属于PRIMARY KEY的列也被设为NOT NULL

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

  • MySQL 将其他 SQL 数据库供应商使用的某些数据类型 Map 到 MySQL 类型。参见第 11.9 节“使用其他数据库引擎中的数据类型”

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

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

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

CREATE TABLE t
(
  c1 VARCHAR(10) CHARACTER SET binary,
  c2 TEXT CHARACTER SET binary,
  c3 ENUM('a','b','c') CHARACTER SET binary
);

结果 table 具有以下定义:

CREATE TABLE t
(
  c1 VARBINARY(10),
  c2 BLOB,
  c3 ENUM('a','b','c') CHARACTER SET binary
);

要查看 MySQL 是否使用了您指定的数据类型以外的其他数据类型,请在创建或更改 table 后发出DESCRIBE显示创建 table语句。

如果使用myisampack压缩 table,则可能会发生某些其他数据类型更改。参见第 15.2.3.3 节“压缩 tableFeature”