mysql中单引号问题 ,不解

来源:互联网 发布:阿里云icp代备案系统 编辑:程序博客网 时间:2024/04/30 03:20

现在数据库编程,都使用传参方式,不仅很好地避免了SQL注入。在编写代码时思路也很清晰。但是最近在对项目中的代码进行测试时,所有可以接受文本框的地方输入单引号会出问题。该单引号不是英文单引号,也不是中文单引号。而是在中文单引号后再加一个英文单引号。很是奇怪,使用smartsniff检查发送到服务器执行的语句,和返回错误,中文单引号编程了/..,英文单引号变成了/'.该语句发送到服务器执行的返回结果是,#42000错误,好像是说语法错误,但是直接从smartsniff中捕获到的这条语句放到服务器执行却不提示错误。当然执行的结果中也就没有中文单引号这个符号了。经过在navicat中直接填入‘后更新,发现一个中文单引号等于两个点符号。但是真是两个..号吗,再用smartsniff一看两个中文单引号居然占了六个字节,奇怪的是 一个对应的是E2 80 99,第二个对应E2 80 98,如果还有第三个又对应E2 80 99,第四个对应E2 80 98。一直递归下去。而一个中文单引号后加一个英文单引号为5C A1 AF 5C 27 ,27是英文单引号ascii码,5C是/反斜杠的ascii码。也就是说A1 AF是中文单引号的ascii码了。上面是三个字节,下面是2个字节,而/表示后面的字符是原字符的意思吧,但单个ascii字符没有这么大,最大就7F吧。有点搞不清,多半服务器端接受到字符时就是因为解析错误导致的。这个等以后看看mysql源码时在来想想是什么原因了。

其实为什么mysql要对中文单引号加/呢。

但如果是mysql本身的bug,为什么网上就没有人提这个问题呢。

恩,而且使用客户端时是没问题的,那是不是说是在我们这个项目中的C#连接器自己在中间搞的鬼呢,还没有使用C试一下,试了应该就知道是mysql本身的原因还是开发连接器时连接器造成的。