【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】OceanBase_CE 4.2.1.1
【问题描述】清晰明确描述问题
建表报错
obclient [mt_thing_v2]> CREATE TABLE mtip_topo_map
(
→ id
varchar(255) NOT NULL COMMENT ‘主键’,
→ function_code
varchar(255) DEFAULT NULL COMMENT ‘系统编码(拓扑图同时支撑设备流程图和工艺流程图两个功能,这里区分一下)\r\n工艺流程图:process_design\r\n设备流程图:device_connect’,
→ title
varchar(255) DEFAULT NULL COMMENT ‘拓扑图标题’,
→ image
longblob COMMENT ‘缩略图’,
→ crop_id
varchar(64) DEFAULT NULL COMMENT ‘企业id’,
→ theme
varchar(255) DEFAULT NULL COMMENT ‘样式主题’,
→ style
json DEFAULT NULL COMMENT ‘基础样式’,
→ figure_display
tinyint(1) DEFAULT NULL COMMENT ‘图注是否显示’,
→ legend_display
tinyint(1) DEFAULT NULL COMMENT ‘图例是否显示’,
→ balance_display
tinyint(1) DEFAULT NULL COMMENT ‘平衡表是否显示’,
→ create_user
varchar(255) DEFAULT NULL COMMENT ‘创建人’,
→ create_time
datetime DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
→ update_user
varchar(255) DEFAULT NULL COMMENT ‘最后更新人’,
→ update_time
datetime DEFAULT CURRENT_TIMESTAMP COMMENT ‘更新时间’,
→ remark
varchar(255) DEFAULT NULL COMMENT ‘备注’,
→ width
double DEFAULT NULL COMMENT ‘画布宽度’,
→ height
double DEFAULT NULL COMMENT ‘画布高度’,
→ play_back_enable
tinyint DEFAULT ‘0’ COMMENT ‘是否可以回放’,
→ main_map_flag
tinyint DEFAULT ‘0’ COMMENT ‘主图标记’,
→ grid_size
int DEFAULT NULL COMMENT ‘网格间距’,
→ grid_fixed
tinyint(1) DEFAULT NULL COMMENT ‘图中元素是否与网格吸附’,
→ PRIMARY KEY (id
) USING BTREE
→ ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT=‘工艺流程图’;
ERROR 1215 (HY000): Child column ‘map_id’ data length cannot be less than parent column ‘id’ data length
[192.168.36.10:2882] [2024-01-09 14:21:27.093189] [YB42C0A8240A-00060BAAA6A18BD0-0-0]
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
oblog.rar (8.8 KB)
2 个赞
秃蛙
2024 年1 月 9 日 14:33
#3
看下表名
select * from oceanbase.CDB_OB_TABLE_LOCATIONS where table_id=‘500231’ limit 5;
1 个赞
obclient [oceanbase]> select * from oceanbase.CDB_OB_TABLE_LOCATIONS where TABLE_ID=‘500231’ limit 5;
±----------±--------------±---------------±---------±-----------±---------------±------------------±-----------±--------------±----------±------±------±--------------±---------±---------±-------------±----------------±----------±----------------±--------------±---------+
| TENANT_ID | DATABASE_NAME | TABLE_NAME | TABLE_ID | TABLE_TYPE | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | DATA_TABLE_ID | TABLET_ID | LS_ID | ZONE | SVR_IP | SVR_PORT | ROLE | REPLICA_TYPE | DUPLICATE_SCOPE | OBJECT_ID | TABLEGROUP_NAME | TABLEGROUP_ID | SHARDING |
±----------±--------------±---------------±---------±-----------±---------------±------------------±-----------±--------------±----------±------±------±--------------±---------±---------±-------------±----------------±----------±----------------±--------------±---------+
| 1004 | mt_thing_v2 | mtip_topo_line | 500231 | USER TABLE | NULL | NULL | NULL | NULL | 200110 | 1001 | zone1 | 192.168.36.10 | 2882 | LEADER | FULL | NONE | 500231 | NULL | NULL | NULL |
| 1004 | mt_thing_v2 | mtip_topo_line | 500231 | USER TABLE | NULL | NULL | NULL | NULL | 200110 | 1001 | zone2 | 192.168.36.11 | 2882 | FOLLOWER | FULL | NONE | 500231 | NULL | NULL | NULL |
| 1004 | mt_thing_v2 | mtip_topo_line | 500231 | USER TABLE | NULL | NULL | NULL | NULL | 200110 | 1001 | zone3 | 192.168.36.12 | 2882 | FOLLOWER | FULL | NONE | 500231 | NULL | NULL | NULL |
±----------±--------------±---------------±---------±-----------±---------------±------------------±-----------±--------------±----------±------±------±--------------±---------±---------±-------------±----------------±----------±----------------±--------------±---------+
3 rows in set (0.362 sec)
1 个赞
秃蛙
2024 年1 月 9 日 14:40
#6
show table status like ‘% mtip_topo_line%’;
obclient [mt_thing_v2]> show table status like ‘%mtip_topo_line%’;
±---------------±----------±--------±-----------±-----±---------------±------------±----------------±-------------±----------±---------------±---------------------------±---------------------------±-----------±-------------------±---------±------------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
±---------------±----------±--------±-----------±-----±---------------±------------±----------------±-------------±----------±---------------±---------------------------±---------------------------±-----------±-------------------±---------±------------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------+
| mtip_topo_line | oceanbase | 0 | DYNAMIC | 0 | 0 | 0 | NULL | NULL | NULL | NULL | 2024-01-09 18:06:19.000000 | 2024-01-09 18:06:19.000000 | NULL | utf8mb4_general_ci | 0 | ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | 工艺流程图连接线记录表 |
±---------------±----------±--------±-----------±-----±---------------±------------±----------------±-------------±----------±---------------±---------------------------±---------------------------±-----------±-------------------±---------±------------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------+
1 row in set (0.167 sec)
秃蛙
2024 年1 月 9 日 14:47
#8
select now(); 看下本地时间。 看这个表今天18点06分已经创建上了,报错提示有点不太符合预期。
obclient [oceanbase]> select now();
±--------------------+
| now() |
±--------------------+
| 2024-01-09 14:57:27 |
±--------------------+
1 row in set (0.002 sec)
服务器的时间是正常的,当前时间。
这个建表语句,是客户端执行的,应该是有时区的影响, 增加了8个小时
秃蛙
2024 年1 月 9 日 15:10
#10
上午10点 创建表mtip_topo_map 下午再创建报错ERROR 1215 (HY000): Child column ‘map_id’ data length cannot be less than parent column ‘id’ data length。
换个表名后 正常,基本确认表名重复导致,但报错返回不符合预期,内部先定位下。
2 个赞
秃蛙
2024 年1 月 9 日 16:19
#11
show table status 展示的create_time 和 update_time 是版本缺陷,4.2.1.3版本已经修复。暂时不影响使用。
集群是否有主备租户?
秃蛙
2024 年1 月 9 日 18:59
#12
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
这个sql 能看到是否有外键约束关系。
兹拉坦
2024 年1 月 17 日 20:47
#15
原因:因为你关了 foreign_key_checks 这个系统变量,然后你先创建了外键子表,之后才创建外键父表,父表和子表的外键列不匹配,所以报错了。
解决:你先查下和外键相关的字典视图 information_schema.xxx(忘了叫啥了,和 MySQL 兼容的,自己百度查下吧),然后根据外键父表名 mtip_topo_map 在字典视图里找到子表名,看看子表里 map_id 多长,再调整父表或者子表的列长度,把父表 id 列调小,或者把子表 map_id 列调大,保证子表外键列的长度不小于父表外键列就好了。