返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 3019|回复: 0

[转载] 【转载】达梦数据库 查询报“字符串截断”

[复制链接]
发表于 2024-2-26 15:22:22 | 显示全部楼层 |阅读模式
【转载】达梦数据库 查询报“字符串截断”


达梦数据库 查询时,报“字符串截断”问题
在使用达梦数据查询语句时,特别是字段类型为TEXT类型,当对此字段进行字符串操作,且该字段内容长度过长时会出现“字符串截断”错误。


例如下方学生简介表中有text字段introduce
create table student(
        id BIGINT primary key  comment'主键',
        name varchar(50) comment '姓名',
        introduce text comment'学生简介'        
        
) comment'学生简介表';


我们要截取学生简介字段的前500个字符时,当表中introduce 有超长字段时,会报“字符串截断”错误。

select *,SUBSTRB(introduce,0,500) from student;


报错“字符串截断”错误




经过研究、询问。发现好像字符串函数,虽然可以处理text类型,但是估计底原理是,先将text类型转字符串类型。再进行处理。所以会出现超长错误。

SUBSTR()
SUBSTRB()
BIT_LENGTH()
CHAR_LENGTH()
CHARACTER_LENGTH()
TO_CHAR()
REGEXP_REPLACE()
大多数字符串函数都是不能超过13105

REPLACE()函数不受影响

有些函数处理的字符串长度好像是32767,故处理时先使用length()函数相应的筛选一下

改写语句后


select *,
regexp_replace(introduce,'我','你'),
length(introduce)
from student
where length(introduce)<13105


或者

select *,
regexp_replace(introduce,0,13105),
from student;



在程序设计中,假如存在对字符串替换,筛选时,最好也控制用户输入长度不超过13105




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表