日期:2014-05-20  浏览次数:20466 次

对于乱码问题有研究的兄弟进来一下
这个问题应该说是关于MS2005的问题。
问题起因是:

我的网站系统有这样一个功能:
要通过查询用户帐号来查询用户信息。
当用户名为英文的时候的没有任何问题,但是当用户名为中文的时候,始终查不出任何信息。
于是我做了一下工作,发现了一些问题。

(1)我检查拉存储过程,并直接在数据库中以中文名验证,没有什么问题。
执行的语句如下
.....
exec   过程名称,   @用户名过程参数   =   N '用户名称 '--N代表unicode编码
.....
(2)于是我打开sql   server   profiler来监测。然后我访问网页,发现显示的调用语句如下:
.....
exec   过程名称,   @用户名过程参数   =   '??? ' --跟上面的差别在于少了一个N,导致产生乱码。
.....
(3)现在解决问题的关键就是如何能让数据库在直接来自于网站的查询时,能执行(1)中的语句。



------解决方案--------------------
直接用command.Text = " exec 过程 N '名称 ' " 不要@参数=
------解决方案--------------------
如果传参数,参数类型用nvarchar. 如果用sql字符串拼接, 参照上面的。
------解决方案--------------------
up
------解决方案--------------------
如果数据库中使用unicode存储,那么参数值也必须使用utf-8,可以在查询前使用
encoding.getstring()作一下转换
------解决方案--------------------
先确定是否必须用unicode,好像这样的需求不太多。当然存在,但也许你的应用环境下根本不需要
------解决方案--------------------
用hashtable传存储过程的参数