案例分享:前端软件使用正常,后台日志文件经常报错‘字符串或二进制数据将在表T_BAS_PLUGINL,列XXX中被截断’原创
金蝶云社区-西瓜不甜苦瓜不苦
西瓜不甜苦瓜不苦
101人赞赏了该文章 352次浏览 未经作者许可,禁止转载编辑于2024年04月05日 10:31:31

问题描述

前端软件使用正常,后台日志文件经常报错:

字符串或二进制数据将在表“ProdLog.dbo.T_BAS_PLUGINLOG”,列“FOBJECTTYPEID”中被截断;

如下图所示。

image.png

分析处理过程

1、查询云星空数据字典,没有找到这个表T_BAS_PLUGINLOG;

2、仔细看日志,发现是日志库‘ProdLog’;

3、在测试环境上查看日志库里面的这个表“T_BAS_PLUGINLOG”的列“FOBJECTTYPEID”;

执行sp_help T_BAS_PLUGINLOG

长度显示是100字节,如下图所示;

image.png

直接在SQL里面展开表,看字段的话,显示的是50字符;如下图所示;

image.png

4、查看报错日志里面提示的值的原内容是

“101010200000000000035056E5B15F388FB(业务类型_0102(半成品))”;

截断值:

“101010200000000000035056E5B15F388FB(业务类型_0102(半成品)”

也就是被截断了一个“)”;

直接看这个内容是确实超过了50字符的;

说明:

在Unicode编码中,无论是英文还是中文,每个字符都占用两个字节。

5、处理这报错的话,可以由业务前端控制这个字段的值不要超过50字符;

如果实际就是需要超过的话,那就后台修改这个字段的长度即可,比如改为200字节。可执行如下语句;

alter table T_BAS_PLUGINLOG  

alter column FOBJECTTYPEID nvarchar(200)


扩展知识

1、nchar 和 nvarchar (Transact-SQL)

2、sp_help (Transact-SQL)

赞 101