---
title: OceanBase 数据库 MySQL 模式下常规 CTE 带有 UNION ALL 时数据类型转换错误-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OceanBase 数据库 MySQL 模式下常规 CTE 带有 UNION ALL 时数据类型转换错误相关的常见问题和使用技巧，帮助您快速解决 OceanBase 数据库 MySQL 模式下常规 CTE 带有 UNION ALL 时数据类型转换错误的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OceanBase 数据库 MySQL 模式下常规 CTE 带有 UNION ALL 时数据类型转换错误

更新时间：2026-05-18 09:11

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

OceanBase 数据库 MySQL 模式下，CTE 中 UNION ALL 左右支数据时，最终的结果会强制根据左支进行数据类型转换，导致正确性问题。

## 关键诊断信息

### 触发条件

MYSQL 模式下，CTE 中 UNION ALL 左右支有数据，且数据类型不同。

## 问题原因

当前 OceanBase 数据库内核处理 CTE 类型转换时，错误的将常规 UNION ALL 强制根据 UNION ALL 左支数据类型进行转换。 正确逻辑为：针对 with clause 不带 recursive 场景，应该按照常规 UNION ALL 解析，综合左右两边的结果进行类型推导。

## 问题的风险及影响

常规 CTE UNION ALL 执行结果可能存在正确性问题。

## 影响租户

影响 OceanBase 数据库中的 MySQL 租户，对于 SYS 租户和 Oracle 租户无影响。

## 影响版本

OceanBase 数据库 V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.3 GA（oceanbase-3.2.3.0-20220418212020）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本。

## 解决方法及规避方式

- 对于不带有 Recursive 的 CTE Clause，参考左右支数据类型进行类型转换。
 - 将 CTE UNION ALL 改写成常规的 UNION ALL 语句。
 - 升级到问题已修复版本，目前已修复的版本包含 OceanBase 数据库 V3.2.3 BP10（oceanbase-3.2.3.3-110000092023091219）、V3.2.4 BP5（oceanbase-3.2.4.5-105000012023081513）及之后版本。

Previous

[Comment for field is too long (max = 4000) 报错原因](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000631337)

Next

[Oracle 模式 TO_NUMBER() 执行报错 ORA-01722](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000532680) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
