VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1564|回复: 15

对于乱码问题有研究的兄弟进来一下

[复制链接]

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-25 12:00:02 | 显示全部楼层 |阅读模式
问题起因是:

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

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

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-2-13 21:00:02 | 显示全部楼层
网站系统编码全站采用utf-8,并且测试显示在传给数据库过程之前,都无乱码,一切正常。
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-2-13 21:15:01 | 显示全部楼层
多语言版本最好用unicode类型
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-2-14 06:45:01 | 显示全部楼层
exec 过程名称, @用户名过程参数 = N'用户名称'
//这句是直接用sql 写的还是用参数添加的形式写的?
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-2-16 22:15:01 | 显示全部楼层
重新描述一下:
(1)我检查拉存储过程,并在数据库中执行过程,输入中文名参数验证,没有什么问题。  
产生的执行的语句如下  
.....  
exec  过程名称,  @用户名过程参数  =  N'用户名称'--N代表unicode编码  
.....  
(2)于是我打开sql  server  profiler来监测。然后我访问网页,发现sql  server  profiler显示的调用语句如下:  
.....  
exec  过程名称,  @用户名过程参数  =  '???' --跟上面的差别在于少了一个N,导致产生乱码。  
.....  
(3)现在解决问题的关键就是如何能让数据库在完成来自于网站的查询时,能执行(1)中的语句。
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-2-16 22:30:01 | 显示全部楼层
重新描述一下:
(1)我检查拉存储过程,并在数据库中执行过程,输入中文名参数验证,没有什么问题。  
产生的执行的语句如下  
.....  
exec  过程名称,  @用户名过程参数  =  N'用户名称'--N代表unicode编码  
.....  
(2)于是我打开sql  server  profiler来监测。然后我访问网页,发现sql  server  profiler显示的调用语句如下:  
.....  
exec  过程名称,  @用户名过程参数  =  '???' --跟上面的差别在于少了一个N,导致产生乱码。  
.....  
(3)现在解决问题的关键就是如何能让数据库在完成来自于网站的查询时,能执行(1)中的语句。
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-2-17 15:15:01 | 显示全部楼层
直接用command.Text = " exec 过程 N'名称' "

不要@参数=
回复

使用道具 举报

0

主题

58

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-2-17 21:15:01 | 显示全部楼层
如果传参数,参数类型用nvarchar. 如果用sql字符串拼接, 参照上面的。
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-2-18 13:00:01 | 显示全部楼层
如果数据库中使用unicode存储,那么参数值也必须使用utf-8,可以在查询前使用
encoding.getstring()作一下转换
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-20 19:15:01 | 显示全部楼层
先确定是否必须用unicode,好像这样的需求不太多。当然存在,但也许你的应用环境下根本不需要
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表