对于不存在的列

时间:2017-03-21 05:57:34

标签: mysql

我一直收到这个错误的插入...更新查询,问题,这个列'str'在更新的表中不存在,或者我正在从中提取数据的任何表,它不是在查询中。

Error Code: 1406. Data too long for column 'str' at row 215710

我完全被这里难过了。这是一个mysql错误?我甚至将查询隔离到一列,仍然遇到了这个错误。

更新1:

我刚尝试使用手动值进行更新,在一列上只设置为longtext。我仍然得到完全相同的错误。

更新2:

重大更新,我将问题分解为select查询,原始错误隐含了一个表列,但是,它似乎指向我假设的是下一行的某种临时表列。当我把它从查询中拉出来时,它起作用了。具有讽刺意味的是,这与我进行单列测试的列相同,我在查询的重复键部分的更新中手动输入了值。

CONCAT_WS('', UC_Words(`name`), ' | ', UC_Words(`city`), ' ', UC_Words(`state`), ' ', UC_Words(`country`), CONCAT('|---|',`name-key`)) AS `owner-data`

我目前正在使用大量的GROUP_CONCAT,但我已经调整了长度。 CONCAT_WS长度有参数吗?注意:UC_Words是一个自定义功能。这可能是罪魁祸首,还需要测试它......

更新3:

错误似乎是UC_Words功能的结果。 'str'是该函数中的name字段。 Type设置为VARCHAR 255,这太短了。

2 个答案:

答案 0 :(得分:0)

MySQL将截断超出指定列宽的任何插入值。

要做到这一点没有错误,请尝试将MySQL模式切换为不使用STRICT。

编辑:

更改模式

这可以通过两种方式完成:

打开你的" my.ini"在MySQL安装目录下的文件,并查找文本" sql-mode"。 发现:

代码:

将SQL模式设置为严格

SQL模式=" STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 替换为:

代码:

将SQL模式设置为严格

SQL模式=" NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 或

您可以在数据库管理工具中运行SQL查询,例如phpMyAdmin: 代码:

SET @@ global.sql_mode ='';

答案 1 :(得分:0)

错误似乎是UC_Words功能的结果。 'str'是该函数中的name字段。 Type设置为VARCHAR 255,这太短了。