概述:一个引号(单引号)可能也会一些不必要的bug
经过1:昨天,药理基地模块(公司的模块)完成了一个"用户权限管理"的模块,打包发布至测试部门的服务器上.结果在测试部门的服务器上,发现用户模块在没有选择科室的时候,无法选择用户 .如图-1所示

图-1
发现此问题之后,我回到了开发库上测试下,发现也存在同样的问题.以后的时间里,我,小胖,周豪三人对此进行了狂轰乱炸般的代码检查,但没有发现问题.不过,在选择具体科室ID的时候,却可以检索出数据.问题的关键应该出现没有科室和有科室时的区别.因为我们是用asp.net做的,而且用于了ajax技术,由此想到,问题可能出在数据传输上.因此,调试两种情况的数据,终于发现了区别,将数据提取出来,如图-2所示

图-2
第一部分是没有科室ID的用户信息;第二部分是有科室ID的用户信息.大家发现有什么不同之处吗?哈哈!
从字体的颜色上看,第一部分的前两行中,余佳和祝菁垃圾(不代码本人观点)字段颜色是黑体,而其他字体颜色是浅蓝色(正常)颜色,这就是问题的所在了.他们后面多了个单引号('),就是这个单引号,在asp.net,client script里,单引号是个很敏感的字符,服务端和客户端数据传输时,程序用单引号来判断字符串是否终结(简单可以这样理解,其他里面比较复杂).将这个烦人的单引号去掉之后,再运行程序,一切正常.如图-3所示

图-3
结论1:
1.像单引号,双引号这种敏感字符,在我们录入数据过程中,要检索出来并直接去掉,或者提示用户之类,总之,尽量不要存到数据库里,因为不知道为出现什么莫名奇怪的情况出现.
经过2:将新编译的程序覆盖到测试的服务器上时,原以为问题会随之解决,可结果问题依旧存在.看来我们高兴得太早了.还没有真正的成功啊!继续查吧.后来我将sql语法拷帆至pl/sql环境里,发现执行不成功.如图-4所示

不知道大家看出什么问题没?第三行,decode中,'男'后的逗号,'2'后面的逗号,用的是全角.......可以吐血而死了
原因就是测试部门用的是Oracle10,对全角的字符不能处理,而开发部门用的是Oracle9,没有此问题(不知道这个解释是否站得住脚)
将其改为半角的逗号以后,问题随之解决.之后,没有再出现类似问题,这下可以安心的回家了
结论2:
1.Oralce数据库,由于版本的不同,在某些功能上可能会出现不一样的结果.
2.就是存储的sql语法最好在pl/sql环境中运行一下,看是否成功.
3.大家使用的Oracle版本最好一致.