13.1.18.6 静默色谱柱规格变更
在某些情况下,MySQL 会悄悄更改CREATE TABLE或ALTER TABLE语句中给定的列规范。这些可能是对数据类型,与数据类型相关联的属性或索引规范的更改。
所有更改均受内部 65,535 字节的行大小限制,这可能会导致某些尝试更改数据类型的尝试失败。参见第 8.4.7 节“table 列数和行大小的限制”。
-
即使不是以这种方式声明,属于
PRIMARY KEY
的列也被设为NOT NULL
。 -
MySQL 将其他 SQL 数据库供应商使用的某些数据类型 Map 到 MySQL 类型。参见第 11.9 节“使用其他数据库引擎中的数据类型”。
-
如果包含
USING
子句以指定给定存储引擎不允许的索引类型,但是该引擎可以使用另一种可用的索引类型而不影响查询结果,则引擎将使用可用的类型。 -
如果未启用严格 SQL 模式,则长度指定大于 65535 的VARCHAR列将转换为TEXT,长度指定大于 65535 的VARBINARY列将转换为BLOB。否则,在这两种情况下都将发生错误。
-
为字符数据类型指定
CHARACTER SET binary
属性会使该列创建为相应的二进制数据类型:CHAR变为BINARY,VARCHAR变为VARBINARY,并且TEXT变为BLOB。对于ENUM和SET数据类型,不会发生这种情况。它们是按声明创建的。假设您使用此定义指定一个 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”。