MYSQL - 更新时 X 列的数据被截断,但插入时不被截断

问题描述 投票:0回答:2

我知道有很多问题看起来像这个,但这个不同;大多数类似的问题都是通过列大小增加来解决的,或者是由列类型与插入的数据不匹配引起的。对于我的情况,我已将列大小从 varchar(250) 增加到 varchar(1000),并且描述显示该列现在是 varchar(1000),但通过进一步调查,我发现任何尝试在该列中放置超过 250 个字符的行为错误(但仅更新被拒绝;插入被接受......见下文)。

我有一个表CDR_TABLE,有超过10列;其中一列(“col_cdata”)的类型为 varchar(250)。我将其更改为文本类型。从那时起:

问题:

  • 所有尝试在该表中插入的操作都成功,但任何尝试更新 col_cdata 包含数据的行的操作都会收到类型为[数据因列“con_cdata”被截断...]的错误。即使更新不在col_cdata上!!!

  • 我可以复制具有 col_cdata 值的一行并将其重新插入为新记录,它可以工作,但对任何列的更新都会产生相同的错误。

  • 如果仅复制 col_cdata 值来更新 col_cdata 上具有空值的另一条记录,则会生成相同的错误。

我该如何调试这个? 感谢您的任何提示。

创建同一个表的 SQL :

CREATE TABLE `cdr_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `col1` int(10) unsigned NOT NULL,
  `col2` varchar(20) CHARACTER SET utf8 NOT NULL,
  `col_cdata` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
  `col3` int(10) unsigned NOT NULL,
  `col4` datetime DEFAULT NULL,
  `col5` datetime DEFAULT NULL,
  `col6` mediumtext CHARACTER SET utf8,
  `col7` int(10) unsigned DEFAULT NULL,
  `col8` enum('a','b') CHARACTER SET utf8 NOT NULL DEFAULT 'a',
  `col9` int(10) unsigned DEFAULT NULL,
  `col10` int(10) unsigned DEFAULT '1',
  `col11` float NOT NULL,
  `col12` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `col13` enum('c','d','e') DEFAULT 'c',
  `col14` text,
  `col15` int(10) unsigned DEFAULT NULL,
  `col16` int(10) unsigned DEFAULT NULL,
  `col17` tinyint(1) DEFAULT '0',
  `col18` tinyint(1) DEFAULT '0',
  `col19` enum('d','success','e') DEFAULT 'success',
  `col20` varchar(255) DEFAULT NULL,
  `col21` int(10) unsigned DEFAULT NULL,
  `col22` text,
  `col23` int(11) DEFAULT NULL,
  `col24` int(11) DEFAULT NULL,
  `col25` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

更新: (1)我已经减少了要插入列中的数据并逐步增加。当我输入超过250个字符时出现问题;所以这意味着: - 从 varchar(250) 到 varchar(1000) 的更改似乎有效,但实际上不起作用;如果我执行 desc col_cdata 我会看到 varchar(1000) 但如果长度超过 250 我就会遇到所有描述问题。 (2)不知道需要什么代码:原来的col_cdat大小是250;我把它吃到了1000;描述显示现在它是 varchar(1000);接受在 col_cdata 中插入新行大小 256 个字符,但任何更新该行任何列的尝试都会抛出:

Error: ER_DATA_TOO_LONG: Data too long for column 'custom_data' at row 1 

在日志中,插入该行);插入后,该行的任何列的任何更新都会失败并出现该错误,但现在是时候拒绝更新了。 (插入被接受,但更新被拒绝)。

从根本上来说:为什么在将列从 varchar(250) 增加到 varchar(1000) 后,插入被接受但更新被拒绝?

mysql database rdbms
2个回答
1
投票

您是否尝试将列类型更改为 LONGTEXT?


0
投票

@ibstelix 感谢您的评论。你救了我的命。我已经为镜像表中的相同错误苦苦挣扎了几个小时。

© www.soinside.com 2019 - 2024. All rights reserved.