Flink CDC中mysql 字段设置了默认值 ,然后插入数据时 指定该字段为null 会返回字段默认值 而不是null?
是的,如果在MySQL中为某个字段设置了默认值,并且在插入数据时没有指定该字段的值,则会使用默认值作为该字段的值。即使在插入数据时指定了该字段的值为null,也会被忽略并使用默认值。
这是因为MySQL中的默认值是在插入数据时自动应用的,而不是在查询数据时。因此,无论插入数据时是否指定了该字段的值,都会使用默认值作为该字段的值。
需要注意的是,如果在Flink CDC中从MySQL读取数据时,也可能会遇到类似的问题。因为Flink CDC是从MySQL的二进制日志(binlog)中读取数据的,而这些日志记录的是MySQL数据库的实际操作,包括对字段默认值的应用。因此,在Flink CDC中从MySQL读取数据时,也需要考虑到字段默认值的影响。
是的,如果你在 MySQL 表中为某个字段设置了默认值,并且在插入数据时指定了该字段为 NULL
,那么 MySQL 会使用默认值来填充这个字段。
这是因为在 MySQL 中,NULL
值表示一个未知或缺失的数据。因此,当你在插入数据时指定某个字段为 NULL
时,MySQL 将认为你没有提供这个字段的值,并且会使用默认值来填充它。
如果你不希望使用默认值,并且希望在插入数据时指定某个字段为 NULL
,你可以显式地将该字段设置为 NULL
。例如,假设你有一个名为 my_table
的表,其中有一个名为 value
的字段,你可以使用以下 SQL 语句来插入一条记录,其中 value
字段被设置为 NULL
:
INSERT INTO my_table (id, value) VALUES (1, NULL);
在这个例子中,我们使用了 NULL
关键字来显式地将 value
字段设置为 NULL
。这样,MySQL 就不会使用默认值来填充这个字段。
总之,在 MySQL 中,如果你在插入数据时指定了某个字段为 NULL
,并且该字段有默认值,则 MySQL 会使用默认值来填充这个字段。如果你想指定该字段为 NULL
,你应该显式地将它设置为 NULL
。
在使用Flink CDC从MySQL中读取数据时,如果遇到已设置默认值的字段被指定为null的情况,返回的结果会是字段的默认值而不是null。这是因为当插入操作没有为该字段显式指定值时,系统会自动将该字段的值设置为其默认值。
然而,需要注意的是,在Flink SQL中,Sink表只支持全字段数据的插入,不支持单独指定字段的数据插入和更新操作。因此,如果你想要插入或更新某些特定字段的值,可能需要采用其他方式,比如使用Mybatis等工具进行操作。
这个之前也有其他人反馈过,我是重写了SchemaBuilder,默认值直接指定为null,此回答整理自钉群“Flink CDC 社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。