MySql对表加字段( You have to change some columns to TEXT or BLOBs)_参数配置

对MySql中表增加字段,发现提示报错:

1、首先了解下字符集

不同字符集下,占用空间不一样

gbk编码中,1个字符占用2个字节

utf8编码(默认)中,1个字符占用3个字节

utf8mb4编码中,1个字符占用4个字节

varchar除了存储字符,还需要额外的空间来存储长度和是否为NULL,分别占用1-2字节和1字节

2、行大小限制

      MySQL 表的内部表示具有 65,535 字节的最大行大小限制,即使存储引擎能够支持更大的行。 BLOB 和 TEXT列仅对行大小限制贡献 9 到 12 个字节,因为它们的内容与行的其余部分分开存储。

3、解决方案

    ①调整列的字段长度,比如根据实际业务需要,缩小列的长度,对于大文本字段改为 BLOB或者Text

   ②如果不想缩减列的长度,可以修改数据库参数(innodb_strict_mode)为0,关闭严格检查模式,然后在增加字段。

   SHOW GLOBAL VARIABLES LIKE 'innodb_strict_mode';

MySql对表加字段( You have to change some columns to TEXT or BLOBs)_参数配置_02

    set  GLOBAL innodb_strict_mode=0

MySql对表加字段( You have to change some columns to TEXT or BLOBs)_参数配置_03

参数说明:

      从MySQL5.5.X版本开始,可以开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。当然如果列的字段长度不能压缩的情况下,又要对表增加字段,可以临时关闭严格检查。加完字段后再开启。