在sqlserver中varchar最长只能为8000么? 我要是想在数据库中存储一个>8000的字符串怎么办?谢谢 对varchar,就是8000nvarchar记得好像是4000大于8000只能用text了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SQL Server按页存贮数据,而规定一页大小为8K,单行不能跨页,所以单行最大数据量为8K,然后还要去掉行首呀什么的,就只有8000了,所以Varchar只好8000大了。SQL对特大数据类型TEXT,IMAGE进行了另行存贮规则,可以存贮0-2G甚至更大到2的30次方大。 最后一句写错了,是2G最大,呵呵,1G=2E30 我把类型定义为text,大小自动变为16,而且不能更改,是怎么一回事吖? text的大小到底是多少啊?请高手指点。 text服务器代码页中的可变长度非 Unicode 数据的最大长度为 2的31次-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。 text的长度是16,怎么解释啊? text的长度为16,并不代表它只能保存16个字节。它保存的应该是文件的存放地址。 如果要在MS SQL Server 7.0 上存储>8000的字符串,应该使用TEXT数据类型。就我的经验,对于TEXT 类型的存储处理还是有一些值得注意的问题的。我觉得用存储过程总是很好的办法,业务逻辑清晰,维护方便,执行效率也很高。对于含有text 类型的表,我一般都写两个相应的存储过程(2 for modifying,2 for adding),也就是如果添加或修改的内容<8000,按通常处理,否则特殊处理。假定:有表[myBase].dbo.myTable iid int,ctitle varchar(200),ccontent text参考如下存储过程示例代码:----for content<=8000------------------CREATE PROCEDURE [cp_mytable_add]@iid int,@ctitle varchar(200),@ccontent varchar(8000) ASINSERT INTO myTable VALUES(@iid,@ctitle,@ccontent)---end-----------------------for content>8000------------------CREATE PROCEDURE [cp_mytable_add_text]@iid int,@ctitle varchar(200),@ccontent text ASINSERT INTO myTable VALUES(@iid,@ctitle,'')DECLARE @ptrval varbinary(16)EXECUTE sp_dboption 'myBase','select into/bulkcopy','true'SELECT @ptrval=TEXTPTR(ccontent) FROM myBase.dbo.myTable WHERE iid=@iidWRITETEXT myBase.dbo.myTable.ccontent @ptrval @ccontentEXECUTE sp_dboption 'myBase','select into/bulkcopy','false'---end-------------------说明:1、修改的存储过程也差不多2、实际上,iid通常不是作为参数传递的,处理的办法很多,这里为了说明简洁,用参数。3、与数据库的接口程序判断该调用哪个存储过程。各位高手有什么好的处理办法,请交流,共同提高。 移动数据库 到期后修改字段的问题 关于4表的联合查询 怎么读取表的最后几条记录? 将SQL 2000的数据库倒入到SQL 2005中 SQL数据更新问题! 有偿找人帮解决SQL2000的问题 sql空值问题 一个简单的问题!!!(pb新手) 此场景下,该选择关系型数据库还是NOSQL? 怎样通过INTERNET网连接远程的SQL数据库? for xml为什么不返回所有的数据?
SQL对特大数据类型TEXT,IMAGE进行了另行存贮规则,可以存贮0-2G甚至更大到2的30次方大。
就我的经验,对于TEXT 类型的存储处理还是有一些值得注意的问题的。我觉得用存储过程总是很好的办法,业务逻辑清晰,维护方便,执行效率也很高。对于含有text 类型的表,我一般都写两个相应的存储过程(2 for modifying,2 for adding),
也就是如果添加或修改的内容<8000,按通常处理,否则特殊处理。
假定:有表[myBase].dbo.myTable iid int,ctitle varchar(200),ccontent text参考如下存储过程示例代码:
----for content<=8000------------------
CREATE PROCEDURE [cp_mytable_add]
@iid int,
@ctitle varchar(200),
@ccontent varchar(8000)
AS
INSERT INTO myTable VALUES(@iid,@ctitle,@ccontent)
---end-----------------------for content>8000------------------
CREATE PROCEDURE [cp_mytable_add_text]
@iid int,
@ctitle varchar(200),
@ccontent text
AS
INSERT INTO myTable VALUES(@iid,@ctitle,'')DECLARE @ptrval varbinary(16)
EXECUTE sp_dboption 'myBase','select into/bulkcopy','true'
SELECT @ptrval=TEXTPTR(ccontent) FROM myBase.dbo.myTable
WHERE iid=@iid
WRITETEXT myBase.dbo.myTable.ccontent @ptrval @ccontent
EXECUTE sp_dboption 'myBase','select into/bulkcopy','false'
---end-------------------说明:
1、修改的存储过程也差不多
2、实际上,iid通常不是作为参数传递的,处理的办法很多,这里为了说明简洁,用参数。
3、与数据库的接口程序判断该调用哪个存储过程。各位高手有什么好的处理办法,请交流,共同提高。