相关文章推荐
大力的红茶  ·  Django model ...·  1 周前    · 
私奔的登山鞋  ·  你好奇过 MySQL ...·  1 周前    · 
刚毅的卤蛋  ·  mysql 5.6版本 ...·  11 小时前    · 
跑龙套的凉茶  ·  mysql datetime字段默认值 - ...·  11 小时前    · 
爱热闹的松鼠  ·  QApplication.processEv ...·  3 月前    · 
逆袭的凉面  ·  (已解决)JSON parse ...·  6 月前    · 
热心的皮蛋  ·  Teradata ...·  1 年前    · 
开发者社区 >

问题描述:

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

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

这个是BUG么?

原提问者GitHub用户yancai

这是因为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 企业邮箱发送邮件时,若出现投递失败产生退信,内容提示包含如下: the mta server of * reply:550 failed to meet SPF requirements 或者 the mta server of 163.com — 163mx01.mxmail.netease.com(220.181.14.141) reply:550 MI:SPF mx14,QMCowECpA0qTiftVaeB3Cg—.872S2 1442548128 http://mail.163.com/help 304047