程序和数据库编码问题

qxyywy 2011-09-15 11:37:00
最近弄一个数据采集器,程序在读取页面的时候用gb2312会出现乱码所以用了utf-8 一切正常;

但后来去操作数据库(MSSQL) 打开表操作的时候 直接修改里面的字段时候报“将截断字符串或二进制数据”(SQL语句操作没

有异常),通常我遇到这个问题想到的就是字符串长度问题造成的 但我看了表结构和表数据 我可以确定字符长度没有超出,因为

我将程序插入的数据拷贝成新的一条数据后就完全正常,sql语句修改也没问题,数据呈现也未出现乱码

请问这个是不是数据库和程序编码冲突问题,如何解决
...全文
161 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sunhuaiwei 的回复:]

有来看一下,在问一下,你说插入的时候数据是正常的,你不打开sql编辑,要是直接输出到页面,看看现实的数据是不是和你插入的数据一样。还有:如果你出入的数据很多的话,数据类型尽量用varchar(max),他比较稳定。
[/Quote]

用了一个窗体把采集到的新闻数据读取出来没出现乱码 错误等

另外:“还有:如果你出入的数据很多的话,数据类型尽量用varchar(max)”
这个是什么用途?
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sunhuaiwei 的回复:]

有来看一下,在问一下,你说插入的时候数据是正常的,你不打开sql编辑,要是直接输出到页面,看看现实的数据是不是和你插入的数据一样。还有:如果你出入的数据很多的话,数据类型尽量用varchar(max),他比较稳定。
[/Quote]

用一个窗体把采集到的新闻数据读出来没有发现乱码 错误等
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cjh18168 的回复:]

楼主,貌似插入重复值也会有这种报错信息吧,,,
[/Quote]

CREATE TABLE Gather_Article(
AId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MgId int NULL,
Title varchar(2000) NULL,
Resource varchar(2000) NULL,
Content text NULL,
IsShow int NULL,
Picture varchar(500) NULL
)
这是脚本 除了主键 自增外 没别的约束,重复从何而来呢 并且数据是已经添加进去了 我只是对文本内容(title resource content )进行修改 不应该存在违法某种约束吧,并且选中某行复制程序插入的所有数据 粘贴到表最后 然后对其进行修改没任何异常 现在就是苦恼在这儿
sunhuaiwei 2011-09-15
  • 打赏
  • 举报
回复
有来看一下,在问一下,你说插入的时候数据是正常的,你不打开sql编辑,要是直接输出到页面,看看现实的数据是不是和你插入的数据一样。还有:如果你出入的数据很多的话,数据类型尽量用varchar(max),他比较稳定。
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 liuchaolin 的回复:]

[Content] 用ntext
[/Quote]
还是不行
造成这种的原因有那些呢 不能乱撞吧
cjh18168 2011-09-15
  • 打赏
  • 举报
回复
楼主,貌似插入重复值也会有这种报错信息吧,,,
tongjingjingisfly 2011-09-15
  • 打赏
  • 举报
回复
md5e 2011-09-15
  • 打赏
  • 举报
回复
[Content] 用ntext
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 liuchaolin 的回复:]

直接修改里面的字段时候报“将截断字符串或二进制数据


这个是字段不够长
[/Quote]

[Title] [varchar](2000) NULL,
[Resource] [varchar](2000) NULL,
[Content] [text] NULL,

对应采集到的数据 (无法打开表修改的)
title: 居室换秋装 软装市场渐转旺
resource :<strong>时间:</strong>2011-09-14 <strong>来源:</strong>西安日报 <strong>编辑:</strong>网络编辑<span><g:plusone></g:plusone></span>
content :<P><FONT size=3>        中秋时节,也正是“金九银十”争夺大幕启帷之时。记者注意到,多个软装家居品牌和卖场最近相继发布了各自的秋季新品和新季风尚。商家此举一是为了抓住消费者“换季添购”的消费心理,二是迎合秋季装修的黄金时段抢占市场。</FONT></P>
<P><FONT size=3></FONT> </P>
<P><FONT size=3>  时尚软装渐入人心</FONT></P>
<P><FONT size=3></FONT> </P>
<P><FONT size=3>  据了解,进去九月以来,窗帘及床上用品等产品销量明显增加。居美窗帘的销售人员告诉记者:“现代的都市人观念转变很大,以前一个家庭能将一套窗帘用十几年不更换,现在每到季节变换,就会有很多人前来选购新的窗帘,而且还有很多年轻人,对窗帘的色泽和材质要求特别高,由此可见,人们对软装饰品的重视程度。”</FONT></P>
<P><FONT size=3></FONT> </P>
<P><FONT size=3>  一位正在选购的赵女士告诉记者:“最近下的两场雨,天气明显转凉,原本打算十?一再更换床品和窗帘,也体早到现在选购。我觉得,我们应该根据气候及时调整窗帘、床品等凸显居室气氛的物品,这样不仅能让我们居住的更舒服,还能改变一成不变的居室风格,带来新的生活感触。”</FONT></P>
<P><FONT size=3></FONT> </P>
<P><FONT size=3><FONT color=#0000ff size=4><STRONG>  推荐阅读</STRONG></FONT></P>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt"></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/MingRenJiaJu/91-20882.html"><FONT face=宋体><FONT size=4><FONT color=#0000ff><SPAN lang=EN-US><SPAN lang=EN-US>月亮公主孟庭苇</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US> </SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>我的美丽心世界</SPAN></SPAN></FONT></FONT></FONT><FONT size=3></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/QiYeXinWen/65-20884.html"><FONT face=宋体><FONT color=#0000ff><FONT size=4><SPAN lang=EN-US><SPAN lang=EN-US>家好月圆,</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>欢乐游园—</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>汇泰龙2011</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>年中秋游园活动举行</SPAN></SPAN></FONT></FONT></FONT></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/FangChanXingYeDongTai/84-20819.html"><FONT face=宋体><FONT color=#0000ff><FONT size=4><SPAN lang=EN-US><SPAN lang=EN-US>五金行业<SPAN lang=EN-US>跨越大发展</SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US> </SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>附加值成关注焦点</SPAN></SPAN></FONT></FONT></FONT></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/XingZuoFengShuiJiaJu/92-20836.html"><SPAN lang=EN-US><SPAN lang=EN-US><FONT color=#0000ff size=4 face=宋体>不得不看!史上最全失败婚姻风水布局</FONT></SPAN></SPAN></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/QiYeXinWen/65-20712.html"><SPAN lang=EN-US><SPAN lang=EN-US><FONT color=#0000ff size=4 face=宋体>汇泰龙电视广告在凤凰卫视热播</FONT></SPAN></SPAN></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/XingZuoFengShuiJiaJu/92-20880.html"><FONT face=宋体><FONT color=#0000ff><FONT size=4><SPAN lang=EN-US><SPAN lang=EN-US>光棍年不光棍</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US> </SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>让你桃花朵朵开的家居风水</SPAN></SPAN></FONT></FONT></FONT></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/QiYeXinWen/65-20801.html"><FONT face=宋体><FONT color=#0000ff><FONT size=4><SPAN lang=EN-US><SPAN lang=EN-US>建设学习型组织,</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US>促企业快速发展</SPAN></SPAN></FONT></FONT></FONT></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN><A href="http://www.hutlon.com/QiYeXinWen/65-20712.html"><SPAN lang=EN-US><SPAN lang=EN-US><FONT color=#0000ff size=4 face=宋体>汇泰龙电视广告在凤凰卫视热播</FONT></SPAN></SPAN></A></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN><A href="http://www.hutlon.com/ZhuangXiuZiXun/85-20658.html"><FONT color=#0000ff><FONT size=4><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" lang=EN-US><SPAN lang=EN-US>五金配件</SPAN></SPAN>“<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" lang=EN-US><SPAN lang=EN-US>四两拨千斤</SPAN></SPAN>” <SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" lang=EN-US><SPAN lang=EN-US>选购有诀窍</SPAN></SPAN></FONT></FONT></A></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/manage/%E6%B1%87%E6%B3%B0%E9%BE%99%E4%BA%94%E9%87%91%E4%BA%A7%E5%93%81%E7%B3%BB%E5%88%97"><SPAN lang=EN-US><SPAN lang=EN-US><FONT color=#0000ff size=4 face=宋体>汇泰龙五金产品系列</FONT></SPAN></SPAN></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/WeiYuChanPin/76.html"><FONT face=宋体><FONT color=#0000ff><FONT size=4><SPAN lang=EN-US><SPAN lang=EN-US>汇泰龙卫浴产品系列</SPAN></SPAN><SPAN lang=EN-US><SPAN lang=EN-US> </SPAN></SPAN></FONT></FONT></FONT></A></SPAN><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US></SPAN></H1>
<H1 style="MARGIN: auto 0cm; mso-line-height-alt: 12.0pt"><SPAN style="COLOR: blue; FONT-SIZE: 14pt" lang=EN-US><A href="http://www.hutlon.com/ZhiNengDianZiSuo/666.html"><SPAN lang=EN-US><SPAN lang=EN-US><FONT color=#0000ff size=4 face=宋体>汇泰龙智能电子锁系列</FONT></SPAN></SPAN></A><!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /--><?XML:NAMESPACE PREFIX = O /><O:P></O:P></SPAN></H1></FONT></FONT>
<P><FONT size=3><div class="SitePaging"><font style='font-size:16px;'><< </font>  <font style="font-size:16px;color: #FF0000;">1</font>   <a href="/FangChanXingYeDongTai/84-20898_1.html"><font style="font-size:16px;"><u>2</u></font></a>   <a href="/FangChanXingYeDongTai/84-20898_2.html"><font style="font-size:16px;"><u>3</u></font></a>   <a href="/FangChanXingYeDongTai/84-20898_3.html"><font style="font-size:16px;"><u>4</u></font></a>  <b><a href="/FangChanXingYeDongTai/84-20898_1.html"><font style='font-size:16px;'>>></font></a></b><b><a href="/FangChanXingYeDongTai/84-20898_3.html"><font style='font-size:16px;'> 尾页 </font></a> </b></div></div>

请问如何超出?

md5e 2011-09-15
  • 打赏
  • 举报
回复
直接修改里面的字段时候报“将截断字符串或二进制数据


这个是字段不够长
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liuchaolin 的回复:]

strTemp = Common.getUrlSource(dt.Rows[i][0].ToString(), "utf-8");
编码改成

Encoding.Default

参考
[/Quote]

直接改为Encoding.Default 和 用你说的参考方法都一样 数据插入正常 但打开表修改的时候 有将截断字符串或二进制数据的错误
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chen_ya_ping 的回复:]

将截断字符串或二进制数据 我怎么看都像是长度的问题啊,还有就是mysql默认是latin1编码,你可以设置你的数据库为utf-8编码
[/Quote]

大哥你又没看题了 我是用的MSSQL 非MYSQL
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fengyarongaa 的回复:]

最好就 统一成 utf-8

这样比较 常规一些
[/Quote]
我测试是用的utf-8 因为用GB2312会出现乱码 截取字符的时候会出错,但用utf-8虽然成功了,可就是出现了我说的那个问题啊 在打开表操作的时候 无法修改
md5e 2011-09-15
  • 打赏
  • 举报
回复
strTemp = Common.getUrlSource(dt.Rows[i][0].ToString(), "utf-8");
编码改成

Encoding.Default

参考
chen_ya_ping 2011-09-15
  • 打赏
  • 举报
回复
将截断字符串或二进制数据 我怎么看都像是长度的问题啊,还有就是mysql默认是latin1编码,你可以设置你的数据库为utf-8编码
ycproc 2011-09-15
  • 打赏
  • 举报
回复
最好就 统一成 utf-8

这样比较 常规一些
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunhuaiwei 的回复:]

你看看数据采集的数据会不会有什么特殊字符什么的,检查下采集的数据。
[/Quote]

采集下来的数据没别的特殊地方 就是一般的HTML代码 检查后发现 插入数据库的时候用的替换"'"这个的时候会将数据改掉:如<span style='color:Red;'>会被改为<span style=''color:Red;''>(两个单引号) 其他的没什么特别的

这儿贴一个采集到的数据 被替换过单引号
<P style="TEXT-INDENT: 30px; MARGIN: 0px 3px 15px"><FONT size=3>住房公积金支取的政策有所调整。昨天,记者获悉,为保障缴存职工的合法权益,提高住房公积金的使用效率,市住房公积金管理中心下发有关通知,对住房公积金相关支取政策进行了调整,调整后的政策从2011年9月1日起施行。</FONT></P>
<P style="TEXT-INDENT: 30px; MARGIN: 0px 3px 15px"><FONT size=3></FONT> </P>
<P style="TEXT-INDENT: 30px; MARGIN: 0px 3px 15px"><FONT size=3>根据规定, 职工因购买、建造自住住房或者翻建、大修自住住房支取本人住房公积金账户中储存余额尚不足的,提取其配偶、父母、子女的住房公积金账户中的储存余额时,除满足规定的资金用途和相关人员书面同意条件外,还须符合职工本人缴存住房公积金的条件。本人没有住房公积金账户的,不得提取其父母、子女的住房公积金。</FONT></P>
<P style="TEXT-INDENT: 30px; MARGIN: 0px 3px 15px"><FONT size=3><div class="SitePaging"><font style=''font-size:16px;''><< </font>  <font style="font-size:16px;color: #FF0000;">1</font>   <a href="/FangChanXingYeDongTai/84-20912_1.html"><font style="font-size:16px;"><u>2</u></font></a>  <b><a href="/FangChanXingYeDongTai/84-20912_1.html"><font style=''font-size:16px;''>>></font></a></b><b><a href="/FangChanXingYeDongTai/84-20912_1.html"><font style=''font-size:16px;''> 尾页 </font></a> </b></div></div>


qxyywy 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ajaxtop 的回复:]

就用sql改吧
mysql编码建立时一定得设置好

要不会出现问题
[/Quote]

朋友 请看清题目
qxyywy 2011-09-15
  • 打赏
  • 举报
回复
这个数据采集不是自己开发的 是在网上档下来的 相关文章字段的采集是用字符串起始标签判断截取的 并没用正则表达式。

#region 获得每个Url的文章标题、说明、正文内容,并插入数据库
Gather_Article G_A = new Gather_Article();//文章对象

for (int i = 0; i < dt.Rows.Count; i++)
{
strTemp = Common.getUrlSource(dt.Rows[i][0].ToString(), "utf-8"); //这儿获取URL页面的所以字符,传入URL和编码方式 估计问题就出在这儿

//获取新闻内容配置
ds = Common.GetParticularConfig(DataSourceId, 3);

strTemp = Common.GetOperatedString(strTemp, ds);//查找字符并截取

string strContent = strTemp;

// 获取新闻标题配置
ds = Common.GetParticularConfig(DataSourceId, 4);

strTemp = Common.GetOperatedString(strContent, ds);

G_A.Title = strTemp;

// 获取新闻说明配置
ds = Common.GetParticularConfig(DataSourceId, 5);

strTemp = Common.GetOperatedString(strContent, ds);

G_A.Resource = strTemp;

// 获取新闻正文内容配置
ds = Common.GetParticularConfig(DataSourceId, 6);

strTemp = Common.GetOperatedString(strContent, ds);

G_A.Content = strTemp;

if (!Common.CheckArticleExists(G_A.Title))
{
G_A.MgId = MgID;
Common.AddArticle(G_A);//添加文章到数据库
}
}
#endregion


这是获取URL页面所以字符
/// <summary>
/// 根据采集url地址以及编码方式获得网页源代码
/// </summary>
/// <param name="strUrl">信息采集地址 eg:www.sina.com</param>
/// <param name="strEncoding">编码方式 eg:gb2312,utf-8 etc</param>
/// <returns>网页源代码字符串</returns>
public string getUrlSource(string strUrl,string strEncoding)
{
string lsResult;
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();

StreamReader sr = new StreamReader(rep.GetResponseStream(), Encoding.GetEncoding(strEncoding));

lsResult = sr.ReadToEnd();
}
catch(Exception ex)
{
lsResult = "";
Console.WriteLine(ex.Message);
}
return lsResult;
}

将文章对象添加到数据库

/// <summary>
/// 增加一条数据
/// </summary>
public int AddArticle(Gather_Article model)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into Gather_Article(");
strSql.Append("MgId,Title,Resource,Content");
strSql.Append(")");
strSql.Append(" values (");
strSql.Append(model.MgId + ",");
strSql.Append("'" + model.Title.Replace("'","''") + "',");
strSql.Append("'" + model.Resource.Replace("'","''") + "',");
strSql.Append("'" + model.Content.Replace("'","''") + "'");
strSql.Append(")");

return Run.RunSql_Int(strSql.ToString());
}

ajaxtop 2011-09-15
  • 打赏
  • 举报
回复
就用sql改吧
mysql编码建立时一定得设置好

要不会出现问题
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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