开发者社区> 问答> 正文

mysql 5.6版本 datetime值为null时 sqltype解析异常

问题描述:

mysql 版本为5.6.12, 在插入数据时,DATETIME类型的字段(如update_time字段)设置为NULL时,在从canal客户端获取到的数据中,对应字段的sqlType为1111(OTHER)

而在mysql 5.5.*版本中做同样的测试,DATETIME为null时,canal客户端获取到的对应sqlType为93(TIMESTAMP)

这个是BUG么?

原提问者GitHub用户yancai

展开
收起
绿子直子 2023-05-09 16:05:41 146 0
2 条回答
写回答
取消 提交回答
  • 确认是一个bug,mysql5.6增加了新的LogEvent类型,增加swtich判断后即可修复

    原回答者GitHub用户agapple

    2023-05-10 11:05:42
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    这是因为MySQL 5.6.12版本对DATETIME类型的数据进行了修改,将原来的DATETIME类型改成了新的DATETIME(DATETIME)类型。而MySQL 5.5.x版本则仍然使用原来的DATETIME类型。

    在MySQL 5.6.12版本中,当设置一个DATETIME类型的字段为NULL时,它会被转换成一个空字符串"",而不是一个NULL值。因此,在从canal客户端获取到的数据中,对应字段的sqlType被设置为了1111(OTHER),表示该字段是一个非数值型字段。

    而在MySQL 5.5.x版本中,当设置一个DATETIME类型的字段为NULL时,它会被转换成一个NULL值,因此在从canal客户端获取到的数据中,对应字段的sqlType被设置为了93(TIMESTAMP),表示该字段是一个日期时间类型字段。

    为了解决这个问题,可以在MySQL 5.6.12版本中将DATETIME类型的字段显式地标记为NULL,例如使用DEFAULT NULL或者SET NULL语法。这样可以确保在从canal客户端获取到的数据中,对应字段的sqlType被正确地解析出来。

    2023-05-10 08:20:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像