MySQL的SQL语句 - 数据定义语句(14)- CREATE TABLE 语句 (9)

静默的列规范变更

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

所有更改都受限于65,535字节的内部行大小限制,这可能会导致某些数据类型更改尝试失败。

● 属于 PRIMARY KEY 的列即使没有以声明为 NOT NULL,也会遵守不为空的要求。

● 在创建表时,尾随空格会自动从 ENUM 和 SET 成员值中删除。

● MySQL 会将其他SQL数据库供应商使用的数据类型映射为 MySQL 的特定类型。

● 如果包含 USING 子句来指定给定存储引擎不允许的索引类型,但还有另一种索引类型可用,该引擎可以在不影响查询结果的情况下使用该索引类型,则该引擎将使用可用类型。

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

● 为字符数据类型指定 CHARACTER SET 二进制属性将导致将列创建为对应的二进制数据类型: CHAR 变为 BINARY,VARCHAR 变为 VARBINARY, TEXT 变为 BLOB。对于 ENUM 和 SET 数据类型,不会出现这种情况;它们是根据声明创建的。假设使用以下定义指定一个表:

1. CREATE TABLE t
2. (
3.   c1 VARCHAR(10) CHARACTER SET binary,
4.   c2 TEXT CHARACTER SET binary,
5.   c3 ENUM(‘a‘,‘b‘,‘c‘) CHARACTER SET binary
6. );

生成的表具有以下定义:

1. CREATE TABLE t
2. (
3.   c1 VARBINARY(10),
4.   c2 BLOB,
5.   c3 ENUM(‘a‘,‘b‘,‘c‘) CHARACTER SET binary
6. );

要查看 MySQL 是否使用了指定的数据类型以外的类型,请在创建或更改表之后使用 DESCRIBE 或 SHOW CREATE TABLE 语句查看。

如果使用 myisampack 压缩表,则可能会发生某些其他数据类型更改。

官方地址:
https://dev.mysql.com/doc/refman/8.0/en/silent-column-changes.html

MySQL的SQL语句 - 数据定义语句(14)- CREATE TABLE 语句 (9)

上一篇:登录 Mysql 时遇到错误 Error1524 提示 ‘mysql_naive_password’is not loaded


下一篇:纯JS,AJAX