暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

林员外聊编程 2020-08-19
227
静默的列规范变更
 
在某些情况下,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 变为 BINARYVARCHAR 变为 VARBINARY, TEXT 变为 BLOB。对于 ENUM SET 数据类型,不会出现这种情况;它们是根据声明创建的。假设使用以下定义指定一个表:
 
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 是否使用了指定的数据类型以外的类型,请在创建或更改表之后使用 DESCRIBE SHOW CREATE TABLE 语句查看。
 
如果使用 myisampack 压缩表,则可能会发生某些其他数据类型更改。
 
 


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

文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论