ERROR 1406 (22001): Data Too Long, field len 30, data len 48
今天遇到一个保持问题比较诡异:
执行sql语句insert into test.COLUMNS select * from information_schema.COLUMNS;报错:ERROR 1406 (22001): Data Too Long, field len 30, data len 48
问题的背景大概是这样子:
1、TiDB4.0分布式数据库系统,去information_schema.TABLES copy一份表结构,然后建一个一模一样的空表到一个临时库csdn上面。
2、在tidb的命令行里面执行 insert into test.COLUMNS select * from information_schema.COLUMNS;
3、尝试mysqldump从information_schema的TABLES表里面导出数据,导入到csdn库上的TABLES表里面去,还是报错。
4、检查了两个库information_schema和csdn库,表结构都是一样的。
看报错,应该是字段只有30的长度,但是录入的数据缺有48个字符串,那么就再仔细检查表结构
CREATE TABLE `TABLES` (`TABLE_CATALOG` varchar(512) DEFAULT NULL,`TABLE_SCHEMA` varchar(64) DEFAULT NULL,`TABLE_NAME` varchar(64) DEFAULT NULL,`COLUMN_NAME` varchar(64) DEFAULT NULL,`ORDINAL_POSITION` bigint(64) DEFAULT NULL,`COLUMN_DEFAULT` text DEFAULT NULL,`IS_NULLABLE` varchar(3) DEFAULT NULL,`DATA_TYPE` varchar(64) DEFAULT NULL,`CHARACTER_MAXIMUM_LENGTH` bigint(21) DEFAULT NULL,`CHARACTER_OCTET_LENGTH` bigint(21) DEFAULT NULL,`NUMERIC_PRECISION` bigint(21) DEFAULT NULL,`NUMERIC_SCALE` bigint(21) DEFAULT NULL,`DATETIME_PRECISION` bigint(21) DEFAULT NULL,`CHARACTER_SET_NAME` varchar(32) DEFAULT NULL,`COLLATION_NAME` varchar(32) DEFAULT NULL,`COLUMN_TYPE` text DEFAULT NULL,`COLUMN_KEY` varchar(3) DEFAULT NULL,`EXTRA` varchar(30) DEFAULT NULL,`PRIVILEGES` varchar(80) DEFAULT NULL,`COLUMN_COMMENT` varchar(1024) DEFAULT NULL,`GENERATION_EXPRESSION` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
看到有一个字段EXTRA是`EXTRA` varchar(30) DEFAULT NULL,那么就去检查下这个字段里面的数据的值,是否有超过的。
mysql-17:31:41> select length(EXTRA) l,EXTRA from information_schema.TABLES order by l desc limit 50;
+----+--------------------------------------------------+
| l | EXTRA |
+----+--------------------------------------------------+
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
| 48 | DEFAULT_GENERATED on update CURRENT_TIMESTAMP(3) |
检查得到length(extra),确实最大长度是48,难道是字符集的原因吗,因为类似mysql的数据库里面,字符集不一样,占据空间是不一样的。
先看库的字符集,是一样的:
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| csdn | CREATE DATABASE `csdn` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+------------------------------------------------------------------++--------------------+--------------------------------------------------------------------------------+
| Database | Create Database |
+--------------------+--------------------------------------------------------------------------------+
| INFORMATION_SCHEMA | CREATE DATABASE `INFORMATION_SCHEMA` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+--------------------+--------------------------------------------------------------------------------+
我们再看下表的字符集定义,是否一样,也是一样的:
use information_schema;
CREATE TABLE `TABLES` (`TABLE_CATALOG` varchar(512) DEFAULT NULL,`TABLE_SCHEMA` varchar(64) DEFAULT NULL,`TABLE_NAME` varchar(64) DEFAULT NULL,`COLUMN_NAME` varchar(64) DEFAULT NULL,`ORDINAL_POSITION` bigint(64) DEFAULT NULL,`COLUMN_DEFAULT` text DEFAULT NULL,`IS_NULLABLE` varchar(3) DEFAULT NULL,`DATA_TYPE` varchar(64) DEFAULT NULL,`CHARACTER_MAXIMUM_LENGTH` bigint(21) DEFAULT NULL,`CHARACTER_OCTET_LENGTH` bigint(21) DEFAULT NULL,`NUMERIC_PRECISION` bigint(21) DEFAULT NULL,`NUMERIC_SCALE` bigint(21) DEFAULT NULL,`DATETIME_PRECISION` bigint(21) DEFAULT NULL,`CHARACTER_SET_NAME` varchar(32) DEFAULT NULL,`COLLATION_NAME` varchar(32) DEFAULT NULL,`COLUMN_TYPE` text DEFAULT NULL,`COLUMN_KEY` varchar(3) DEFAULT NULL,`EXTRA` varchar(30) DEFAULT NULL,`PRIVILEGES` varchar(80) DEFAULT NULL,`COLUMN_COMMENT` varchar(1024) DEFAULT NULL,`GENERATION_EXPRESSION` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;use csdn;
CREATE TABLE `TABLES` (`TABLE_CATALOG` varchar(512) DEFAULT NULL,`TABLE_SCHEMA` varchar(64) DEFAULT NULL,`TABLE_NAME` varchar(64) DEFAULT NULL,`COLUMN_NAME` varchar(64) DEFAULT NULL,`ORDINAL_POSITION` bigint(64) DEFAULT NULL,`COLUMN_DEFAULT` text DEFAULT NULL,`IS_NULLABLE` varchar(3) DEFAULT NULL,`DATA_TYPE` varchar(64) DEFAULT NULL,`CHARACTER_MAXIMUM_LENGTH` bigint(21) DEFAULT NULL,`CHARACTER_OCTET_LENGTH` bigint(21) DEFAULT NULL,`NUMERIC_PRECISION` bigint(21) DEFAULT NULL,`NUMERIC_SCALE` bigint(21) DEFAULT NULL,`DATETIME_PRECISION` bigint(21) DEFAULT NULL,`CHARACTER_SET_NAME` varchar(32) DEFAULT NULL,`COLLATION_NAME` varchar(32) DEFAULT NULL,`COLUMN_TYPE` text DEFAULT NULL,`COLUMN_KEY` varchar(3) DEFAULT NULL,`EXTRA` varchar(30) DEFAULT NULL,`PRIVILEGES` varchar(80) DEFAULT NULL,`COLUMN_COMMENT` varchar(1024) DEFAULT NULL,`GENERATION_EXPRESSION` text NOT NULL,KEY `idx_pri` (`TABLE_SCHEMA`,`TABLE_NAME`,`COLUMN_KEY`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
当然了解决办法很简单,就是在csdn库上的TABLES表里面修改字符长度:
alter table csdn.TABLES modify `EXTRA` varchar(128) DEFAULT NULL;
但是为什么information_schema库的TABLES表里面,为什么`EXTRA` varchar(30) DEFAULT NULL里面能存取48个字符呢,这问题值得后续研究下。
ERROR 1406 (22001): Data Too Long, field len 30, data len 48相关推荐
- 一秒快速修正 mysql ERROR 1406 (22001): Data too long for column ‘name‘ at row 1
222今天导入一个xxx.sql文件时报错ERROR 1406 (22001): Data too long for column.原因是mysql会截断过长的输入,这里需要把sql-mode设置宽松 ...
- mysql error1406_MySQL插入中文时出现ERROR 1406 (22001): Data too long for column 'name' at row 1 (转)...
使用命令行方式登陆到MySQL服务器, 建立一个数据库,数据库编码设为UTF-8.此时,如果直接在命令行窗口使用insert语句插入中文,就遇到类似 ERROR 1406 (22001): Data ...
- Mysql 中ERROR 1406 (22001): Data too long for column 解决方法
导入数据的时候,MYSQL 报错:Data too long for column 解决办法: 在my.ini里找到(此文件在mysql安装目录下) sql-mode="STRICT_TRA ...
- Error: Error while compiling statement: FAILED: SemanticException Unable to load data to destination
ods层新加了一张表,和以前的格式一样 DROP TABLE IF EXISTS ods_students_industry_level; CREATE TABLE `ods_students_ind ...
- ERROR: Can't get master address from ZooKeeper; znode data == null
出现此问题可能是zookeeper不稳定造成的,采用的是虚拟机,经常挂起的状态,使用hbase的list命令出现下面错误,这个可能是hbase的稳定性造成的,解决办法有两种.这里使用第一种办法就解决了 ...
- HBase错误:ERROR: Can't get master address from ZooKeeper; znode data == null 解决办法
一.问题背景 使用命令 $ hbase shell 进入hbase的shell之后使用create命令创建表时出现错误:ERROR: Can't get master address from Zoo ...
- python——csv读取文件报错:error:new-line character seen in unquoted field
记录一下近期遇到的读取csv文件数据问题.使用gzip.open()函数打开压缩文件,csv.reader()函数读取内容. 1.运行代码为: filePath = 'test.csv.gz'with ...
- 用Java向SQL Server数据库中插入float数据报错An error occurred while converting the Float value to JDBC data type
作者:翁松秀 用Java向SQL Server数据库中插入float数据报错 用Java向SQL Server数据库中插入float数据报错 报错信息: 报错原因: 解决方案: 报错信息: An er ...
- Python struct.pack(“!dHHHH%ds“%len(self.data),tt,0,self.tap_lenght,self.tap_type,0,_data)里的%ds是什么意思
今天在看一段Python代码时,看到如下代码 if timestamp:tt = time.time()else:tt = 0.0 if not isinstance(self.data,str):_ ...
最新文章
- 从AdventureWorks学习数据库建模——保留历史数据
- Java并发,volatile+不可变容器对象能保证线程安全么?!
- pip不是内部 pycharm_PyCharm的简单使用
- C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)
- OpenGL Compute Shader Raytracing 计算着色器光线追踪的实例
- html笔记(一)html4+css2.0、css基础和属性、盒模型
- OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并
- BricsCAD 21 for Mac(CAD建模软件)多语言版
- mysql5.6设置日志路径_mysql5.6.12切换binlog二进制日志路径_MySQL
- java xcap,xcap发包工具的简单使用2(发送报文)
- Adobe官方清理工具Adobe Creative Cloud Cleaner Tool使用教程
- web程序中的用户注册
- ERROR: Minimum supported Gradle version is 5.4.1. Current version is 5.1.1.
- 数据库系统概念 实验1~实验9
- ios之实现自动无限循环滚动视图(1)
- 如何防护 DDoS 攻击?
- Ubuntu12.04搭建BigBlueButton
- JAVA SE 8安装与配置
- springboot vue电影购票选座网站源码
- 正大国家期货:期货交易系统中包括的四个要素
热门文章
- asp.net快速开发框架(eFrameWork) v4.0.5
- FPGA挂载EMMC IP源码 ZYNQ PL端读写EMMC IP 最大52MB吞吐率(8bit) 支持1/4/8/bit 支持块读写
- 洛谷P2016 战略游戏 - 树形DP
- 想系统学习GO语言(Golang),能推荐几本靠谱的书吗?
- 环境python3+selenium3+火狐52版本
- 128码和39码编码规则
- 碳纤维包裹电机 碳纤维转子
- 珠峰java_珠峰架构师培养计划2021
- 易中天:《帝国的终结》片断 02
- 分析各家2440开发板的性价比(转自Gooogleman)