达梦数据库 查询时,报“字符串截断”问题

在使用达梦数据查询语句时,特别是字段类型为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

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐