达梦数据库解决 -2685:试图在blob或者clob列上排序或比较问题

前言

今天将项目连接达梦8数据库,发现突然之间报了个错,错误如下:

而且经过我的测试,不光是DM8有这个问题,DM7也未能幸免。

原因

这个问题的原因其实就是我们对达梦库中设置了blob或clob类型的字段进行了排序或者分组操作

解决办法

1、修改数据库参数ENABLE_BLOB_CMP_FLAG

将数据库参数ENABLE_BLOB_CMP_FLAG设置为1后,数据库支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。

ENABLE_BLOB_CMP_FLAG:是否支持大字段类型的比较。0:不支持;1:支持。设置为1后支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。

注意:该参数并不能支持GROUP BY 对大字段进行处理。

执行语句:

sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1);

此时就可以对大字段类型进行排序了,但分组操作还是不行。

2、将大字段类型转换为字符串类型

通过上面测试,GROUP BY 无法通过修改ENABLE_BLOB_CMP_FLAG参数来支持,所以需要将对应的大对象列转换为字符串类型进行处理。

使用CAST将字段类型转换为字符串类型

SQL语句如下:

SELECT ID,CAST(C1 AS VARCHAR) FROM T ORDER BY CAST(C1 AS VARCHAR);
SELECT CAST(C1 AS VARCHAR), COUNT(*) FROM T GROUP BY CAST(C1 AS VARCHAR);

限制条件

1、使用第一种方法,修改数据库参数的方式,无法支持GROUP BY 对大字段的处理。

2、使用第二种方法,通过转换大字段类型为字符串类型可以达到相应的效果,但是如果大字段的内容长度比较长超过32767,内容可能会自动截断。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值