字符串或二进制数据将被截断,保存base64图像

时间:2018-05-11 14:41:37

标签: sql sql-server base64

恭敬地,请告诉我我的场长不够长,请不要回应。不是这种情况。并且尊敬地,请不要回答这个问题,告诉我sp_executesql不能接受超过2K的输入。情况并非如此。

我的问题:我使用sp_executesql提交查询,其中我将base64编码的图像填充到nvarchar(max)字段中。在某些情况下,我收到以下错误:

  

字符串或二进制数据将被截断。声明已经终止。

我有一些示例,其中文本(包括多个base64编码图像)超过5兆。这也推动sp_executesql长度超过5兆。有时这些工作。我已经有一些例子,其中包含了非常小的base64编码图像。有时,他们有时会工作。

我的工作假设:似乎sp_executesql遇到了base64编码文本中的某些字符序列,这导致SQL服务器抛出"将被截断"错误。

我的问题:我发布插入/更新语句时是否有一些编码文本的方法来防止SQL崩溃?

限制:我使用的是开源CRM,因此我不想完全替换插入/更新程序。但我可以改变编码通过现有程序发送的数据的方式。

非常感谢任何帮助。我很难过!

1 个答案:

答案 0 :(得分:1)

我的解决方案:我在审核表中将nvarchar(4000)更改为nvarchar(max),该表已由触发器更新。

详细信息:我忽略了在我的开源CRM中检查触发器。每当更新提交到MY_TABLE时,触发器都会在MY_TABLE_AUDIT中创建一个条目。

抛出错误的字段在MY_TABLE中定义为nvarchar(max),在MY_TABLE_AUDIT中定义为nvarchar(4000)。当我将nvarchar(4000)更改为nvarchar(max)时,触发器工作,我能够保存我的图像。

那么5 meg文本字段是如何进入数据库的呢?它必须发生在初始插入时,它不触发触发器或导入历史数据且触发器被禁用。