暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gbase 字段不兼容的故障处理,Incorrect decimal value:'N for column 'call_dura'at row 27081

生产中业务侧反馈 insert into a select * from b 报错



根据报错提示来看,判断可能是表字段的数据兼容问题。



登录数据库,查看表结构。


Desc tablename;


果然不一样




同一个字段不同的字段类型 a 表的字段类型是 decimal,b 表的是 varchar。


decimal 是一个表示精度的浮点类型 不可以存放特殊字符


varchar 是一个可以存放特殊字符的字段类型



报错中显示是一个‘\N’可能是 b 表存在换行符之类的字符 导致 sql 报错



尝试建表复现测试





报错内容类似但不完全一致,只有 value:‘’中的值不一样。我复现的是空值,生产报错显示‘\n’。这可能是编码不同导致的。



基于以上的测试结果有两种解决方法


一:如果只是偶尔遇到这样的情况,可以手动排除此行的内容。或者手动将此行内容的特殊字符删除。


二:如果是经常遇到,则建议专门针对这样的情况写一种语法。


       类似


IF(column='',NULL,CAST(column as decimal(65,0))) as column,



与业务侧沟通得知,之前每天的数据都可以正常插入。只是某个日期的不可以。看来属于第一种情况。


于是让业务侧根据提示查看 27081 行,是不是有特殊字符如果有的话排除这个特殊字符看能不能插入成功。


最后发现确实有特殊字符排除并成功插入。

最后修改时间:2023-10-31 15:57:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论