基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
列默认值吞空格
更新时间:2026-05-18 09:11
问题现象
当列默认值尾部为一个或者多个空格时,无论是该列为 char 类型还是 varchar 类型。都会去掉尾部的空格。与原生 MySQL 的行为不兼容。在原生 MySQL 中只有 char 类型会去掉默认值中的尾部空格。varchar 类型会保留。
关键诊断信息
触发条件
在 OceanBase 数据库 MySQL 模式下,列类型为 varchar 时,创建尾部包含空格的默认值列时触发。
事前巡检
无。
事后诊断
查看建表类型是否为 varchar,列默认值尾部有没有空格,相关查询 SQL 如下。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'varchar' AND COLUMN_DEFAULT IS NOT NULL AND table_name = $table_name;
问题原因
在 OceanBase 数据库 MySQL 模式下,列默认值尾部有空格时,varchar 类型采取了和 char 类型一样的去除空格的策略。导致与原生 MySQL 行为的不一致。
问题的风险及影响
与原生 MySQL 的行为不兼容。utf16 格式下可能产生 4103 check error 问题。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 MySQL 租户,对于 Oracle 租户无影响。
影响版本
OceanBase 数据库企业版本 V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本、V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)及之后版本。