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