解决 mysql [Data Too Long..]数据更新失败的异常

最近数据库经常出现如下异常:

 multiQuery Query Failed, ERRNO: 1406 (Data too long for column....)


解决方案:

1.检查数据库中该字段的长度是否太小(如果字段类型是字符串类型(varchar,char)),太小只要增大这个字段的长度即可,但是mysql一张表的varchar总长度不能超过65535,如果超过需要对表进行压缩


2.如果字段类型是text,则检查数据库innodb_file_format 格式

mysql> show variables like '%format%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| binlog_format            | STATEMENT         |
| date_format              | %Y-%m-%d          |
| datetime_format          | %Y-%m-%d %H:%i:%s |
| default_week_format      | 0                 |
| innodb_file_format       | Barracuda         |
| innodb_file_format_check | ON                |
| innodb_file_format_max   | Antelope          |
| time_format              | %H:%i:%s          |
+--------------------------+-------------------+


需要将innodb_file_format   改为 Barracuda   这个模式应该和row压缩有关

步骤如下:

1.linux下打开 mysql配置文件(在 /etc/my.cnf),加入:

innodb_file_format=Barracuda

2:在数据库中执行:

SET GLOBAL innodb_file_format=Barracuda;


ALTER TABLE [tableName]
    ENGINE=InnoDB //表的存储引擎
    ROW_FORMAT=COMPRESSED //row的格式,有DEFAULT(默认)、FIXED(混合)、DYNAMIC(动态)、COMPRESSED(压缩)、REDUNDANT(冗长)、COMPACT(紧凑)
    KEY_BLOCK_SIZE=8; //压缩InnoDB的缓冲池的索引页


更多关于压缩的资料,参考:http://dev.mysql.com/doc/refman/5.7/en/innodb-compression-usage.html

你可能感兴趣的:(mysql)