关于 varchar max的误区
在论坛或者qq群里都会遇到有人问,类似varchar(max)不够存字符串的长度怎么办?有的人会说改成text的数据类型。那真相是什么呢?
首先,varchar(max)是微软用来替代text数据类型的,后续的版本text 等老的字段类型可能会被取消。所以text能存的,varchar( max)肯定能存下。 其实它能够存放的字符数是非常大的。下面粘上我以前博客上的一个截图:
下面针对可能遇到的情况给出解决方案
字符串被截断
declare @test varchar(max) set @test=replicate("1",9000) print len(@test)解决办法
使用强制转换 set @test=replicate(convert(varchar(max),"1"),9000)--强制转换为varchar(max)。 print len(@test)
解决办法2 把9000个字符拆分成2个部分,每个部分都少于8000 set @test=replicate(convert(varchar(max),"1"),4000)+replicate(convert(varchar(max),"1"),5000) print len(@test)
这里还有一个坑,就是print @test 你把这个文本内容copy出来后发现字符只有8000个
查看内容时数据少了
有时候只看len我们 心里肯定不踏实,还是想看看内容是否全部保存了set @test=replicate(convert(varchar(max),"1"),99000) select @test 对应select 的结果发现长度为43680
这是因为在SSMS 选项中,以网格显示结果对应非xml最多可以65535个字符。
那么我们就有另外的一个办法了
SELECT CAST("<A><![CDATA[" + CAST(@test as nvarchar(max)) + "]]></A>" as xml) 把上面的语句转换为xml文件,就可以显示99001了
或者 把select出来的结果 另存为CSV 也可以看到完整的记录
varchar(max) 能存放的字符串是很长的,达到4.2亿,如果发现了不能存放可以先看看到底是那种原因引起的.
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C# 调用 python3
- 下一篇: mysql中获取varchar类型数据的最大值