日期:2014-05-18  浏览次数:20444 次

sqlserver存储数据格式问题
我的系统是64位的windows server 2008
数据库是64位的sql server 2008
网站是gb2312
我用utf8编码的网页程序采集抓取utf8编码的网站时,经常采集到一些特殊的编码,写不到我的数据库里(网页程序可以识别,但是向数据库写入的时候出错),用chr和asc查看时值都是莫名其妙的,我怀疑我的数据库不支持这种编码,请问如何解决?
是不是我的数据库默认格式是gb2312?这个格式在哪里修改?
现在我用网页脚本控制,写了一个仅保留汉字和英文数据的函数,但是这个函数漏洞太大,经常出错,有没有人能帮我改改,我想要的是 可以把抓取到的信息写到数据库里 或者 写不到数据库里的字符删除 仅保留可以写入的,过滤特殊字符函数如下
<%

Function ValidatedString(str)
  If IsNull(str) or str="" Then
  str=""
  ValidatedString=""
Exit Function
  End If
  str = Trim(str)
  Dim vti, vta, vtb, vString
  vString = ""
  For vti = 1 to len(str)
vta = mid(str, vti, 1)
vtb = escape(vta)
If Instr(vtb, "%u") Then
'response.Write(vta&"  "&vtb&"<br>")
If VS_other(vta) Then
vString = vString&vta
Else
If VS_cn(vta) Then
vString = vString&vta
End If
End If
Else
vString = vString&vta
End If
  Next
  ValidatedString = vString
End Function

Function VS_cn(str)
  Dim re
  Set re = new RegExp 
  re.Pattern = "[\u4E00-\u9FFF]" 
  re.Global = true 
  VS_cn = re.Test(str)
End Function

Function VS_other(str)
  Dim vs_e, vs_i
  vs_e = ",。:;、《》{}【】!@#¥%……&*( )——+|/ \"
  If Instr(vs_e, str) > 0 Then
  VS_other = True
  Else
  VS_other = False
  End If
End Function

%>
这函数漏洞挺大,很多数据库不支持的字符都过滤不了,求帮修改。
我网站都是gb2312,仅有几个单独的抓取程序是utf8,请问如果数据库改成utf8,那么用gb2312的网页操作时有影响吗?怎么改数据库的utf8?

------解决方案--------------------
你将数据库存储这一类字符串的字段类型设置为 nvarchar 或 nchar 试试。
------解决方案--------------------
nvarchar型的应该能够识别unicode.

UTF8的没有问题,
------解决方案--------------------
nvarchar,它的编码位数貌似能够满足你的需求啊!

一家之言,欢迎拍砖。
------解决方案--------------------
你那确实是编码问题,改为支持unicode就行,就是把varchar改为nvarchar,把text改为ntext,把char改为nchar
至于alter table的方法请阅读http://msdn.microsoft.com/zh-cn/library/ms190273(v=SQL.90).aspx
msdn上说
仅能通过下列方式更改 text、ntext 和 image 列的数据类型: 
text 改为 varchar(max)、nvarchar(max) 或 xml
ntext 改为 varchar(max)、nvarchar(max) 或 xml
image 改为 varbinary(max)

可以用
alter table [esf] alter column [miaoshu] nvarchar(4000)
alter table [esf] alter column [miaoshu] Ntext