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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)

1406错误


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


20190120140420337.png


通过查阅发现导致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错误


20190120142556787.png


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


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


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


解决办法:

(1)设计表的时候就要考虑全面各个字段的数据类型,以及是否允许为空Null

(2)删除数据表中的所有数据,再向表中添加字段,此时可以将该字段设置为不为空;如果不删除数据,则必须设置为允许为空Null,否则会因为已有数据并不存在这个新增的非空字段而报出该错误!


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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
存储 关系型数据库 MySQL
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
83 1
|
6月前
|
关系型数据库 MySQL
MySQL 报错 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file
MySQL 报错 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file
922 0
|
3月前
|
关系型数据库 MySQL
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
256 2
|
6月前
|
SQL 关系型数据库 MySQL
mysql下出现Unknown column ‘xx‘ in ‘on clause‘的完全解决方法
mysql下出现Unknown column ‘xx‘ in ‘on clause‘的完全解决方法
407 0
|
4月前
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
212 4
|
5月前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之遇到“OSERROR: argument list too long”的错误,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
63 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
117 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL Online DDL(Data Definition Language)
MySQL Online DDL(Data Definition Language)
61 1
|
5月前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之数据源同步时,使用脚本模式采集mysql数据到odps中,使用querySql方式采集数据,在脚本中删除了Reader中的column,但是datax还是报错OriginalConfPretreatmentUtil - 您的配置有误。如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
Java
Intellij IDEA运行报Command line is too long的解决办法
Intellij IDEA运行报Command line is too long的解决办法
371 1