2015年10月27日
今天b/s的程序发布到windows 2008的服务器上后,在查询界面发现一个问题,模糊查询英文开头的条件可以查询出来
select * from tt where fname like '%GF%' 是有结果的
但是
select * from tt where fname like '%杨%' 返回为空。
再次将开发项目完全拷贝到服务器端进行调试,问题依旧;
分析过程:
1、前台jquery所传字符串未转码,到后台识别成乱码。但是调试情况下发现后台接收没有乱码,并将拼接语句粘贴到PLSQL中查询有结果。顺便查看IIS设置,均为UTF-8;所以不是这个原因 ---PASS
2、考虑是服务器为新装环境,oracle的客户端字符集和服务端不一致;
通过学习http://blog.csdn.net/dream19881003/article/details/6800056的博客了解了字符集查询设置方法;
Windows平台查询语句:
查询客户端字符集
select * from nls_instance_parameters;
查询服务端字符集
select * from nls_database_parameters;
结果发现开发环境和服务器环境一致,和服务器也一致;
3、没办法再次问度娘,结果在论坛中找到了答案:
http://bbs.csdn.net/topics/390291683 这个帖子。
后来查找msdn上的关于ConnectionString 的描述后才明白问题的原因
链接字符串中加入 Unicode=true 配置就可以了。
Name | 默认值 | 说明 |
---|---|---|
Data Source - 或 - 服务器 |
| 要连接的 Oracle 实例的名称或网络地址。 |
Integrated Security | 'false' | 该连接是否为安全的连接。 可识别的值为 true(极力建议使用)、false、yes 和 no。 |
密码 |
| Oracle 帐户的登录密码。 为了保持较高的安全级别,强烈建议您改用集成安全性关键字。 |
Persist Security Info | 'false' | 当设置为 false 或 no(强烈建议)时,如果连接是打开的或者一直处于打开的 State,那么安全敏感的信息(如密码)就不会作为连接的一部分返回。 重置连接字符串将重置包括密码在内的所有连接字符串值。 可识别的值为 true、false、yes 和 no。 |
Unicode | 'false' | 指定用于 Oracle 的.NET Framework 数据提供程序是否使用 UTF16 模式 API 调用。 忽略此关键字,但使用 Oracle9i 客户端软件时除外。 |
用户 ID |
| Oracle 登录帐户。 为了保持较高的安全级别,强烈建议您改用集成安全性 |