达梦数据库 查询时,报“字符串截断”问题
在使用达梦数据查询语句时,特别是字段类型为TEXT类型,当对此字段进行字符串操作,且该字段内容长度过长时会出现“字符串截断”错误。
例如下方学生简介表中有text字段introduce
create table student(id BIGINT primary keycomment'主键',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