从MariaDB数据库通过mysqldump命令导出的数据库,在OceanBase数据库导入时报错

【 使用环境 】测试环境
【 OB or 其他组件 】OceanBase All in One
【 使用版本 】4.3.5.0
【问题描述】从MariaDB数据库通过mysqldump命令导出的数据库,在OceanBase数据库导入时报错:ERROR 1067 (42000) at line 10666: Invalid default value for ‘share_image’
【复现路径】问题出现前后相关操作
【附件及日志】share_image字段类型是text,默认值是空字符串’’

1 个赞

发一下sql文本,share_image字段的相关信息发一下 或者直接把字段属于的表结构发一下

1 个赞

以下是这个字段所在表原来在MariaDB数据库里的结构,sql文本太大了,好几个GB,没法发

CREATE TABLE general_questionnaire (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘表主键’,
is_del tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘是否删除’,
create_time datetime NOT NULL DEFAULT current_timestamp() COMMENT ‘创建时间’,
create_by bigint(20) NOT NULL COMMENT ‘创建人’,
update_time datetime NOT NULL DEFAULT current_timestamp() COMMENT ‘更新时间’,
update_by bigint(20) NOT NULL COMMENT ‘更新人’,
final_change_time datetime NOT NULL DEFAULT current_timestamp() COMMENT ‘最后变更时间’,
title varchar(50) NOT NULL COMMENT ‘问卷标题’,
is_using tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘问卷是否启用’,
description varchar(255) DEFAULT NULL COMMENT ‘备注’,
deadline datetime DEFAULT NULL COMMENT ‘答题截止时间’,
type int(4) DEFAULT 0 COMMENT ‘问卷类型 0:问卷模板;1:任务问卷’,
share_image text NOT NULL DEFAULT ‘’ COMMENT ‘问卷分享图片’,
target_type int(4) NOT NULL DEFAULT 0 COMMENT ‘问卷对象类型’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=‘问卷调查表’;

下面是sql文件里insert语句的一部分截图

1 个赞

原因应该是OB的text类型不支持空字符串作为默认类型

1 个赞

这个没办法解决吗?只能修改原表结构吗?

1 个赞

关键是不知道原数据库里有多少张表的多少个字段有这样的设置啊

1 个赞

你可以通过语句过滤一下

1 个赞

怎么过滤?给个例子???

1 个赞

先找一下所有列是text类型的 可以根据这个表过滤 information_schema.columns

1 个赞

为什么会有这样的设定呢?是出于什么原因呢?还是说这是一个BUG?以后的版本会支持吗?

1 个赞

目前就是这样设计的 可以关注一下ob的版本记录 后续是否调整也可以看发版说明

1 个赞

再问一个问题,我还有别的表里面有字段类型是varchar的,虚拟类型是PERSISTENT,表达式是substr函数通过其他字段获得的,这样的数据导入时也报错,有解决方案吗?下面是这个表结构,字段是birth_str_cal

CREATE TABLE system_user_personal_info (
id bigint(20) NOT NULL AUTO_INCREMENT,
puid varchar(256) NOT NULL,
name varchar(50) DEFAULT NULL,
id_card varchar(50) DEFAULT NULL COMMENT ‘身份证号’,
citizen_check_status tinyint(4) NOT NULL COMMENT ‘0=未验证 1=已验证’,
citizen_check_id bigint(20) NOT NULL DEFAULT 0,
email varchar(200) DEFAULT NULL,
mobile varchar(200) DEFAULT NULL COMMENT ‘手机号’,
address varchar(4000) DEFAULT NULL,
avatar varchar(4000) DEFAULT NULL COMMENT ‘头像’,
gender tinyint(4) NOT NULL DEFAULT 0,
birth_date date DEFAULT NULL,
show_name varchar(255) DEFAULT NULL COMMENT ‘别名’,
create_date datetime(6) NOT NULL,
update_date datetime(6) NOT NULL,
create_by bigint(20) NOT NULL,
update_by bigint(20) NOT NULL,
birth_str_cal varchar(4) GENERATED ALWAYS AS (substr(id_card,11,4)) STORED,
PRIMARY KEY (id),
UNIQUE KEY puid (puid),
KEY id_card (id_card),
KEY birth_str_cal (birth_str_cal),
KEY name (name)
) ENGINE=InnoDB AUTO_INCREMENT=1195 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=‘登录用户个人信息’;

image

1 个赞

:facepunch: :facepunch: :facepunch:

发一下 详细的报错信息

这一波操作也行?