1. 程式人生 > >解決 mysql [Data Too Long..]資料更新失敗的異常

解決 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的緩衝池的索引頁