mysqljson存储被截断,没有报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqljson存储被截断,没有报错相关的知识,希望对你有一定的参考价值。

参考技术A 1、字段类型为text
2、确定存储内容不超过64K
3、存在更长内容的存储成功,短的内容存储失败
4、截断出现概率大概20%,
5、日志看参数json都是完整的,入库前都是完整的

存储过程变量中存储SQL语句被截断的问题

@SQL中存储一段动态SQL

where条件获取动态参数,执行@SQL就被截断,把where写死就能执行成功。

例, set=@name='Tom'
set @SQL='select * from tab where name =''@name'' ' 失败
set @SQL='select * from tab where name =''Tom'' ' 成功

当然我的@SQL非常长,LEN=30000多。
是我没写清楚,set @SQL='select * from tab where name ='''+@name+''''就是这样,@SQL和@name的类型都是NVARCHAR(MAX),print 输出的结果是一条被截断的SQL语句,print len(@sql)=30000,就是set @name='TOM'就截断SQL语句,直接在里面写死就可以,不知道为什么

楼主用的 什么数据库?

mysql一般先拼接好SQL,再执行,如下:
set conditions = "select * from table where 1 ";
set conditions = concat(conditions," and id=",1);
set @sql = conditions;

sqlserver一般做拼接的话,如下:
set @sql = 'select * FROM tab where name = @name'追问

用SQLServer
是我没写清楚,set @SQL='select * from tab where name ='''+@name+''''就是这样,@SQL和@name的类型都是NVARCHAR(MAX),print 输出的结果是一条被截断的SQL语句,print len(@sql)=30000,就是set @name='TOM'就截断SQL语句,直接在里面写死就可以,不知道为什么

参考技术A set @SQL='select * from tab where name =''@name'' '

换成下面这样的
set @SQL='select * from tab where name ='''+@name+''''
以后测试的时候,可以在set完后,加条语句print @SQL,看看是什么结果,这个一般就是执行时候的语句追问

是我没写清楚,set @SQL='select * from tab where name ='''+@name+''''就是这样,@SQL和@name的类型都是NVARCHAR(MAX),print 输出的结果是一条被截断的SQL语句,print len(@sql)=30000,就是set @name='TOM'就截断SQL语句,直接在里面写死就可以,不知道为什么

追答

为什么要设置成nvarchar(max)?你什么字符要这么大啊,几百几千就可以了,没有中文全字符就varchar(???)这样啊

追问

开发规范就这样,要用NVARCHAR,另外我的SQL却是非常长,大概10万个字符左右

追答

那个@name里面的数据可能有问题吧,可以print @name print @SQL这样一个一个的查看啊,总会找到错误的

追问

print @SQL 显示的是一个被截断的SQL

追答

那就是太长了还是怎么的

参考技术B set @SQL='select * from tab where name ='+@name追问

是我没写清楚,set @SQL='select * from tab where name ='''+@name+''''就是这样,@SQL和@name的类型都是NVARCHAR(MAX),print 输出的结果是一条被截断的SQL语句,print len(@sql)=30000,就是set @name='TOM'就截断SQL语句,直接在里面写死就可以,不知道为什么

以上是关于mysqljson存储被截断,没有报错的主要内容,如果未能解决你的问题,请参考以下文章

为啥 URL 在存储然后从本地文件系统检索时会被截断?

db2存储过程动态sql被截断

Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串

使用 NodeJS 和 AWS S3 将损坏/截断的 mp4 上传到 S3 存储桶

数据库报错:将截断字符串或二进制数据,啥问题怎么解决

截断表的权限