开发者社区> 问答> 正文

值由Null变为空字符串时,isUpdated属性为false

mysql版本是5.5 将一个varchar类型的列的值由NULL,改为''时,从canal获取的entry的column里,isupdated属性为false。看了下LogEventConverter,感觉是isUpdated方法有个bug。newValue为"",旧值为NULL时,旧的column.getValue()为""。

原提问者GitHub用户zhenghub

展开
收起
绿子直子 2023-05-09 16:03:42 108 0
2 条回答
写回答
取消 提交回答
  • column.isNull()方法可以判断是否为null值

    原回答者GitHub用户agapple

    2023-05-10 11:05:43
    赞同 展开评论 打赏
  • 在MySQL中,NULL和空字符串是不同的概念,但是在Canal中,它们被视为相同的。因此,当你将一个列的值从NULL更改为''(空字符串)时,Canal会认为它没有被更新,isUpdated属性为false。

    这个问题的解决方法是修改LogEventConverter中的isUpdated方法,将原来的比较newValue和oldValue的语句改为比较newValue和column.getValue()的语句。这样就可以正确地判断是否有更新了。

    修改后的isUpdated方法代码示例:

    private boolean isUpdated(Column column, String newValue) {
        if (column.getIsNull() && newValue == null) {
            return false;
        }
        return !column.getIsNull() && !StringUtils.equals(newValue, column.getValue());
    }
    
    2023-05-10 08:43:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载