经历:sybase的sql查询,当传递的参数中包含全角空格(u00a0),查询慢

Posted renxiaoren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经历:sybase的sql查询,当传递的参数中包含全角空格(u00a0),查询慢相关的知识,希望对你有一定的参考价值。

  今天,我遇到了一个sybase数据库查询的问题。一句简单的sql,但是不知道为什么查询不出来,导致生产生产服务器频频挂掉。吓得我的小心脏砰砰啊。

select DISTINCT A.FCIL_CDE as fcilCde   from DND_EVENT_LOG A WHERE A.DOC_REF =?  AND A.DOC_TYPE = ?   AND A.START_OR_END = S 

  后来,经网络运营经理查询,原来是客户传递的参数中包含了特殊字符,即全角空格的转义(\u00a0)。 

  原因是由于:

    DND_EVENT_LOG这张表数据量特别大,有约4亿条记录。当有特殊字符的时候,索引可能不起作用,做表扫描需要耗费巨大的时间。所以还是需要应用方面对用户输入进行检查过滤,防止没有意义的特殊字符作为SQL的参数传入。

 

解决方法:

  其实这个问题非常好解决。只要将传递的参数trim一下就可以了。

params.docRef = $.trim(jQuery("#docRef").val());  //参数

 

 

总结:通过这个问题,我发现了,还是自己编写代码不严谨,思考问题不全面。如果提前考虑到将参数除去空格,那么久不会引起这样或者更多有关空格引发的系列问题。

  以后要多多努力哦!!

以上是关于经历:sybase的sql查询,当传递的参数中包含全角空格(u00a0),查询慢的主要内容,如果未能解决你的问题,请参考以下文章

pentaho cde在sql查询中包含/排除where子句

如何在 Django 中为“in”SQL 子句传递值列表

如何传递文件中包含的命令行参数并保留该文件的名称?

js传递参数中包含+号时的处理方法

MySQL中包含数学比较的SQL查询

post 传递参数中包含 html 代码解决办法,js加密,.net解密