开发者社区> 问答> 正文

blob not null 字段同步问题

当数据源有blob nut null字段,且字段值为空的时候,otter会把这个字段值解析为null,导致目标库insert失败

源库插入了空字符,绕过了not null限制,但是在otter解析的时候空值被解析成了null值,目前仅在blob not null字段上出现了这种情况,不知道其他字段类型是否也有这种情况。

经过测试,所有binary类型的字段都有这个问题,其他类型字段无此问题:

BINARY(M) VARBINARY(M) TINYBLOB BLOB[(M)] MEDIUMBLOB LONGBLOB

原提问者GitHub用户 zing228

展开
收起
大圣东游 2023-06-21 17:28:21 78 0
3 条回答
写回答
取消 提交回答
  • 这是因为在MySQL中,BLOB和VARBINARY类型的字段不能设置为NULL,但是它们可以包含空值。因此,在Otter同步过程中,如果源库中的BLOB或VARBINARY字段为空,则Otter会将其解析为NULL值,从而导致插入到目标库中失败。

    为了解决这个问题,建议在配置文件中设置默认字符集和字符排序规则。例如,在配置文件的dataMediaPair中,添加以下内容:

    {
        "source": {
            "namespace": "your_namespace",
            "name": "your_data_media_name",
            "properties": {
                "defaultCharset": "utf8",
                "defaultCollation": "utf8_general_ci"
            }
        },
        "target": {
            "namespace": "your_namespace",
            "name": "your_data_media_name",
            "properties": {
                "defaultCharset": "utf8",
                "defaultCollation": "utf8_general_ci"
            }
        }
    }
    

    这样,Otter在同步BLOB或VARBINARY字段时就会使用指定的字符集和排序规则,从而避免了空值被解析为NULL值的问题。

    另外,如果你需要动态创建表来同步数据,可以考虑使用数据库中的存储过程或触发器来实现。具体实现方式可以根据具体需求进行调整。

    2023-06-23 14:31:57
    赞同 展开评论 打赏
  • 是的,你看我修复的代码就知道,所有非字符串类型的都有这风险. 之前mysql->oracle有个逻辑,如果是空字符可等价于NULL进行处理,而mysql中NULL,空字符是不等价,isEmptyStringNulled=false.

    原回答者GitHub用户agapple

    2023-06-21 18:28:08
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    Otter同步数据时遇到了Blob Not Null字段同步问题。根据您的描述,Otter在同步Blob Not Null字段时,将空值解析为null值,导致插入失败。

    针对这个问题,您可以尝试以下解决方案:

    修改源库数据:您可以尝试在源库中将Blob Not Null字段的空值修改为非空值,例如一个空格字符。这样可以避免Otter将空值解析为null值。

    修改目标库表结构:如果您无法修改源库数据,您可以尝试在目标库中修改表结构,将Blob Not Null字段的默认值设置为一个非空值,例如一个空格字符。

    修改Otter同步任务:您可以尝试在Otter同步任务中添加一个过滤规则,将Blob Not Null字段排除在同步范围之外。这样可以避免Otter同步Blob Not Null字段的空值。

    升级Otter版本:您可以尝试升级Otter到最新版本,以查看是否已经修复了这个问题。如果没有修复,您可以向Otter官方报告这个问题,以便他们进行修复。

    2023-06-21 17:52:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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