我一直收到这个错误的插入...更新查询,问题,这个列'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,这太短了。
答案 0 :(得分:0)
MySQL将截断超出指定列宽的任何插入值。
要做到这一点没有错误,请尝试将MySQL模式切换为不使用STRICT。
编辑:
更改模式
这可以通过两种方式完成:
打开你的" my.ini"在MySQL安装目录下的文件,并查找文本" sql-mode"。 发现:
代码:
SQL模式=" STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 替换为:
代码:
SQL模式=" NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 或
您可以在数据库管理工具中运行SQL查询,例如phpMyAdmin: 代码:
SET @@ global.sql_mode ='';
答案 1 :(得分:0)
错误似乎是UC_Words功能的结果。 'str'是该函数中的name字段。 Type设置为VARCHAR 255,这太短了。