Ntext 在长度达到4000以上时,出现了中文存成“????”,哪位大虾可以帮解?谢谢

frassn 2005-05-30 09:15:28
我用Ntext存储html 页面到一个字段中,发现当达到4000或者更多些时,中文存取就出现错误,全变成“????”,但是如果是英文就没有问题,我很是郁闷,到底发生了什么事情,哪位大虾请指点一下。我用的是sql server 2000. 没有用readtext, writetext updatetext ,这些方法,是不是因为这个原因? 具体这些方法怎么用,可以给些例子吗?
可以用这个表做个例子吗?
CREATE TABLE [HtmlTable] (
[m_id] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[c_text] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
CONSTRAINT [PK_HtmlTable] PRIMARY KEY CLUSTERED
(
[m_id]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


...全文
257 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuxiaojun2002 2005-07-22
  • 打赏
  • 举报
回复
把ntext改成text,然后改
create procedure get_html_byid
@id char

as
select m_id,c_text from HtmlTable

GO
UpdateSP:
create procedure update_html_byid
@id char,
@text text

as
update HtmlTable
SET c_text=(@text)
WHERE m_id = @id

GO
别忘了(),试一下
Well 2005-06-01
  • 打赏
  • 举报
回复
應該是過程的問題吧。
在調用的時候應該加N
zjcxc 元老 2005-05-31
  • 打赏
  • 举报
回复
存储过程中调用时,你是否没有为字符串加N?

存储过程的存储调用,应该使用:

exec 存储过程名 N'中文字符......这后面跟上大于8000个的中文字符'

如果你使用下面的方式调用存储过程,那应该还是乱码.
exec 存储过程名 '中文字符......这后面跟上大于8000个的中文字符'
frassn 2005-05-31
  • 打赏
  • 举报
回复
Hi every one, I've found the solution for this problem, Thanks a lot for everybody's attention.
Cause:
I use ADO.NET to call this store procedure, the problem is I have to use the fellow
method to creat parameter.

dbHelper.GetParameter( "@text",DbType.String,1073741823,ParameterDirection.Input);
dbParams[2].Value = "my long value"

Not simplely,

dbHelper.GetParameter("@text","my long value")

But I am still confused because I've followed zjcxc(邹建)'s suggestion to do it in SQL Query Analyzer, also failed. Can anybody tell me why?
frassn 2005-05-31
  • 打赏
  • 举报
回复
I am sorry, I have to reply in English. Because our project, I can not setup Chinese input in my work machine.

I've tried your suggestion, I exec update SP in SQL Query Analyzer. Still get the same error.
天地客人 2005-05-31
  • 打赏
  • 举报
回复
关注中,帮你UP
zjcxc 元老 2005-05-31
  • 打赏
  • 举报
回复
你在查询分析器中调用存储过程存储数据进行测试.
zjcxc 元老 2005-05-31
  • 打赏
  • 举报
回复
调用的过程是否有问题?
frassn 2005-05-30
  • 打赏
  • 举报
回复
我的问题奇怪在:例如我出问题的长度是4000(我没找到具体长度,4000以上),当我放4002个英文,正常工作,但是放4000个英文+1个汉字,就出问题了:(
frassn 2005-05-30
  • 打赏
  • 举报
回复
谢谢,我不是很明白你讲存取方法是什么,你是指我的存储过程吗?很简单,
GetSP:
create procedure get_html_byid
@id char

as
select m_id,c_text from HtmlTable

GO
UpdateSP:
create procedure update_html_byid
@id char,
@text ntext

as
update HtmlTable
SET c_text=@text
WHERE m_id = @id

GO
有问题吗?
duanduan1122 2005-05-30
  • 打赏
  • 举报
回复
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。

ntext

可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。

text

服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。

image

可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。
zjcxc 元老 2005-05-30
  • 打赏
  • 举报
回复
你是用什么方法存储的? 应该是存储方法或者读取方法出了问题.

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧