今天遇到一个保持问题比较诡异:

执行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相关推荐

  1. 一秒快速修正 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设置宽松 ...

  2. mysql error1406_MySQL插入中文时出现ERROR 1406 (22001): Data too long for column 'name' at row 1 (转)...

    使用命令行方式登陆到MySQL服务器, 建立一个数据库,数据库编码设为UTF-8.此时,如果直接在命令行窗口使用insert语句插入中文,就遇到类似 ERROR 1406 (22001): Data ...

  3. Mysql 中ERROR 1406 (22001): Data too long for column 解决方法

    导入数据的时候,MYSQL 报错:Data too long for column 解决办法: 在my.ini里找到(此文件在mysql安装目录下) sql-mode="STRICT_TRA ...

  4. 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 ...

  5. ERROR: Can't get master address from ZooKeeper; znode data == null

    出现此问题可能是zookeeper不稳定造成的,采用的是虚拟机,经常挂起的状态,使用hbase的list命令出现下面错误,这个可能是hbase的稳定性造成的,解决办法有两种.这里使用第一种办法就解决了 ...

  6. 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 ...

  7. python——csv读取文件报错:error:new-line character seen in unquoted field

    记录一下近期遇到的读取csv文件数据问题.使用gzip.open()函数打开压缩文件,csv.reader()函数读取内容. 1.运行代码为: filePath = 'test.csv.gz'with ...

  8. 用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 ...

  9. 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):_ ...

最新文章

  1. Centos6安装Zabbix3.4
  2. 计算机软件与理论调剂,2021汕头大学计算机软件与理论081202考研调剂信息
  3. 新手!SDK Manager里找不到API安装的选项怎么办?
  4. TP查询搜索函数的find select get value
  5. MySQL通信类型:同步或者异步
  6. 【教程】VsCode搭建Java开发环境
  7. Dataset XML 序列化,什么是序列化
  8. jQuery.fn.extend 与 jQuery.extend 用法
  9. html5/haXe开发偶感
  10. python爱心代码_母亲节快到了,用Python给老妈写个祝福小程序吧~
  11. C#属性默认值设置(model实体类)
  12. bash shell学习的记录(一)
  13. css数字怎么换行,css实现连续的英文或数字自动换行的方法
  14. JS中的对象以及在web前端的应用
  15. NYOJ 234 吃土豆(基础dp)
  16. Swift 代码添加约束
  17. 放弃蚂蚁offer,选择农行软开!
  18. linux 流量监控利器:iftop
  19. 算法——AcWing算法提高课中代码和题解
  20. html异步加载页面,Jquery异步加载页面(load)

热门文章

  1. IPTV盒子和OTT盒子的区别
  2. AI Canon精选资源清单;带AI功能的PS安装文件与教程;讯飞星火10月对标 ChatGPT;直播换脸工具盘点 | ShowMeAI日报
  3. 错题-阅读理解-中心理解题1
  4. 巴西队提前出线,预定大力神杯?数据分析告诉你,到底谁才是冠军
  5. ChatGPT提示词工程进阶教学
  6. LeetCode每日一题——12.11Dota2 参议院
  7. Python tkinter Misc类+Wm类详解
  8. PMP培训机构是不是实战培训?
  9. GetDocument()的使用
  10. 014 方程组的通解 方法一:通解方程组 方法二:基础解析解