关于 varchar max的误区
来源:互联网 发布:淘宝卖家改评价链接 编辑:程序博客网 时间:2024/06/15 17:13
前言
在论坛或者qq群里都会遇到有人问,类似varchar(max)不够存字符串的长度怎么办?有的人会说改成text的数据类型。那真相是什么呢?
分析
首先,varchar(max)是微软用来替代text数据类型的,后续的版本text 等老的字段类型可能会被取消。所以text能存的,varchar( max)肯定能存下。 其实它能够存放的字符数是非常大的。下面粘上我以前博客上的一个截图:
可以存储的4.2亿 个字符 我相信很难达到的.所以当遇到 貌似“存不下”的情况,尽量多检查下其他的原因
解决
下面针对可能遇到的情况给出解决方案
字符串被截断
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个
这是因为, print是无法线上超过8000的长度,我们查看尽量用len 去查看
查看内容时数据少了
有时候只看len我们 心里肯定不踏实,还是想看看内容是否全部保存了
set @test=replicate(convert(varchar(max),'1'),99000)
select @test
对应select 的结果发现长度为43680
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/10843087@163.com/96550e29d5084522adfd5a09e8f048ac/clipboard.png)
这是因为在SSMS 选项中,以网格显示结果对应非xml最多可以65535个字符。
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/10843087@163.com/fd39843087624691bed99bddae504d2d/clipboard.png)
那么我们就有另外的一个办法了
SELECT CAST('<A><![CDATA[' + CAST(@test as nvarchar(max)) + ']]></A>' as xml)
把上面的语句转换为xml文件,就可以显示99001了
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/10843087@163.com/feb0728e924849f29326a460b35182eb/clipboard.png)
或者
把select出来的结果 另存为CSV 也可以看到完整的记录
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/10843087@163.com/ed681199a78a4594b0fc204a229bcac4/clipboard.png)
总结
varchar(max) 能存放的字符串是很长的,达到4.2亿,如果发现了不能存放可以先看看到底是那种原因引起的.
阅读全文
5 2
- 关于 varchar max的误区
- SQL2005 的VarChar(MAX)
- 【转】 SQL2005 的VarChar(MAX)
- varchar(max) 长度的验证
- varchar 与varchar(max)
- SQL 2005 中varchar(max) 的用法
- varchar(MAX)--SQL2005的增强特性
- varchar(MAX)--SQL2005的增强特性
- SQL Server 2005 的nvarchar(max),varchar(max)来救火
- 关于创新的误区
- 关于seo的误区
- 关于c++的误区
- mysql varchar max
- Varchar(max)的Write方式与stuff的比较
- oracle数据库中对varchar类型求max的解决方法
- sqlserver中text与Varchar(max)的区别
- 关于use case的误区
- 关于继承的几个误区
- Android 四种线程池
- [LintCode 453] 将二叉树拆成链表(Python)
- Mac安装boost库
- java中带变量的json格式数据用string拼接示例
- 我学习go的五个感悟(译)
- 关于 varchar max的误区
- 机器学习笔记-Support Vector Regression(SVR)
- (一)单例模式详解
- Flume拦截器(Interceptor)
- spark中将topN条写到本地文件中
- 车与羊的选择
- Leetcode33题的理解---动笔就变得简单
- 阐述ArrayList、Vector、LinkedList的存储性能和特性。
- kali2017添加国内更新源 + 配置并开启sshd 144 作者 极客圈 关注 2017.06.14 16:29* 字数 119 阅读 4293评论 0喜欢 3 添加国内更新源 1.切换到roo