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