---
title: 常量字符串前声明了 binary 后，会在列上加 cast，导致无法抽取 query range-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 常量字符串前声明了 binary 后，会在列上加 cast，导致无法抽取 query range相关的常见问题和使用技巧，帮助您快速解决 常量字符串前声明了 binary 后，会在列上加 cast，导致无法抽取 query range的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 常量字符串前声明了 binary 后，会在列上加 cast，导致无法抽取 query range

更新时间：2026-05-15 09:06

适用版本： V4.2.x、V4.3.x 内容类型：Troubleshoot  

## 问题现象

SQL 中，常量字符串前加上 binary 操作符之后，会在列上加 cast，导致无法抽取 query range。

## 关键诊断信息

### 触发条件

字符类型的列与字符串常量比较，字符串前加 binary 声明。

### 事前巡检

比如下面的连接条件，code 为 varchar 类型，存在类似下面的连接。

```shell
code = BINARY 'XS2504'

```

### 事后诊断

SQL 中字符类型的列与字符串常量比较，包含 binary 关键字。

## 问题原因

简化测试用例，如下。

```shell
CREATE TABLE test (code VARCHAR(20));
CREATE INDEX idx_code ON test(code);

obclient [test]> explain SELECT * FROM test WHERE  code = BINARY 'XS2504';
+----------------------------------------------------------------------------------------------------------------------+
| Query Plan                                                                                                           |
+----------------------------------------------------------------------------------------------------------------------+
| =====================================================                                                                |
| |ID|OPERATOR             |NAME|EST.ROWS|EST.TIME(us)|                                                                |
| -----------------------------------------------------                                                                |
| |0 |EXCHANGE IN REMOTE   |    |1       |5           |                                                                |
| |1 |└─EXCHANGE OUT REMOTE|    |1       |5           |                                                                |
| |2 |  └─TABLE FULL SCAN  |test|1       |4           |                                                                |
| =====================================================                                                                |
| Outputs & filters:                                                                                                   |
| -------------------------------------                                                                                |
|   0 - output([test.code]), filter(nil)                                                                               |
|   1 - output([test.code]), filter(nil)                                                                               |
|   2 - output([test.code]), filter([cast(test.code, VARCHAR(1048576)) = cast('XS2504', VARCHAR(1048576))]), rowset=16 |
|       access([test.code]), partitions(p0)                                                                            |
|       is_index_back=false, is_global_index=false, filter_before_indexback[false],                                    |
|       range_key([test.__pk_increment]), range(MIN ; MAX)always true                                                  |
+----------------------------------------------------------------------------------------------------------------------+
15 rows in set (0.013 sec)

```

常量字符串前声明了 binary 后（`BINARY 'XS2504'`），会在列上加 cast，导致无法抽取 query range。`cast(test.code, VARCHAR(1048576)) = cast('XS2504', VARCHAR(1048576))` 添加 binary 操作之后的字符序类型为 `utf8mb4_general_ci`, 原本字段的字符序为 `utf8mb4_bin`。

## 问题的风险及影响

不能抽取 query range，最后走了全表扫描的计划。

## 影响租户

影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。

## 影响版本

OceanBase 数据库企业版 V4.2.5 GA（oceanbase-4.2.5.0-100000082024102022）及之后版本、V4.3.5 GA（oceanbase-4.3.5.0-100000122024123020）及之后版本。

## 解决方法

- 升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.5 BP4（oceanbase-4.2.5.4-104000082025052817）及之后版本、V4.3.5 BP2（oceanbase-4.3.5.2-102000162025051417）及之后版本。
 - 暂时避免使用 binary。

## 规避方式

暂时避免使用 binary。

Previous

[OceanBase 数据库 V3.x 为什么 SQL 查询请求路由到 Follow 节点 plan type 为 1？](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003011862)

Next

[升级 OBServer 版本后 SQL 计划无法 OR 展开执行变慢的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003149480) ![有帮助](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) 咨询热线
