MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)

时间:2024-04-11 16:04:03

1406错误

对数据库中的已经写好数据的表进行了改变,结果出现下图错误

MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)

通过查阅发现导致1406的错误原因有很多,而我的错误原因在于数据信息过长超过了原本分配数据库对应字段的空间最大值,通过增加分配的字段空间就解决了。 例如:我给varchar(5) 存入 “88888888” 这样是不可以的,应该分配字段更大的空间 如varchar(300)


如果还是不能解决问题,那么下面这个步骤,你值得一试(来自博客):

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的缓冲池的索引页


1265错误

MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)

出现该错误的原因可能有很多,但我经过几次操作后发现自己总是遇到这个错误,通过字面上的意思是插入的错误的数据或者是说你的某个字段(错误中有提示)定义的长度不够,你存入的数据已经被截断

发现我的错误原因还是字段定义的长度不够,和1406错误原因相同

总是出现这样的问题,我们应该反思一下,从最初就杜绝问题的发生

解决办法:
(1)设计表的时候就要考虑全面各个字段的数据类型,以及是否允许为空Null
(2)删除数据表中的所有数据,再向表中添加字段,此时可以将该字段设置为不为空;如果不删除数据,则必须设置为允许为空Null,否则会因为已有数据并不存在这个新增的非空字段而报出该错误!

望能解决大家的问题,共同进步!