.Net MySql 编码中英文单引号组合异常分析
1、跟踪参数化最终执行的真实sql语句方法,连接串里面增加Logging=true

2、编写业务参数化代码

3、mysql底层驱动源码,参数化最终会重新组装成sql语句,根据log可以拿到真实sql:下图红色方框中就是真实的sql语句,copy到sqlyog执行器里面执行,gbk或utf8下都不会报错,但程序--db中间会报错(仅限gbk编码的数据库)

4、sql语句如下:update gowner set goname='acbc\‘父控件\'',gosex=0,爿讥旌护goadmin=0,goidno='de',gomobile='',goemail='',goaddress='23',gorate=0,gomodifydtime='2017-06-01 09:17:40',goremark='迎宾道康乐小区气象局家属楼5栋b号底店车炎汽车会\‘的',level=0 where goid=228从sql中可以看出,中文和英文单引号都被增加了转义字符;
5、对应功能的mysql驱动源码如下:

6、最终解决办法:一、连接串和set names要统一编码;要么都用gbk,要么都用gb2312二、或者是修改底层驱动的源码,单引号改为双引号包裹字符串DbHelper.ConnectionCharset=gb2312最终会转换为命令setnamesgb2312;

