首页 新闻 会员 周边

求助大湿 asp.ent mysql 中文关键字查询不到对应记录 - 不慎感激

0
悬赏园豆:80 [已解决问题] 解决于 2013-06-25 11:13

现改写一项目,数据库是MySQL 数据库编码是UTF8 开发环境VS2008团队开发版 WEB项目

现出现一问题如图:




当搜索的问题关键字是中文的时候 查询不到记录,如果问题是英文或英文中文混合 我搜索问题中包含的英文 可以查询到记录


特别说明,这里没有出现中文显示问题,包括修改和插入中文都没有问题

该页面数据显示是调用通用的MySql 分页存储过程

        public static DataTable GetDataList(string question, int currPage, int pageSize)
        {
            string strWhere = " 1=1";

            if (!string.IsNullOrEmpty(question))
                strWhere += " and LOCATE('"+ question +"',question)";

            MySqlParameter[] paras = new MySqlParameter[7];
            paras[0] = new MySqlParameter("?tblName", MySqlDbType.VarChar, 255);
            paras[0].Value = "tbl_question";
            paras[1] = new MySqlParameter("?fldName", MySqlDbType.VarChar, 255);
            paras[1].Value = "id,question,answer,create_time,update_time";
            paras[2] = new MySqlParameter("?PageSize", MySqlDbType.Int32);
            paras[2].Value = pageSize;
            paras[3] = new MySqlParameter("?PageIndex", MySqlDbType.Int32);
            paras[3].Value = currPage;
            paras[4] = new MySqlParameter("?IsCount", MySqlDbType.Bit);
            paras[4].Value = false;
            paras[5] = new MySqlParameter("?OrderType", MySqlDbType.Int32);
            paras[5].Value = 1; //0-asc;1-desc
            paras[6] = new MySqlParameter("?strWhere", MySqlDbType.VarChar, 255);
            paras[6].Value = strWhere;

            DataTable dt = MySqlHelper.ExecuteDataTable("prc_page_result", CommandType.StoredProcedure, paras);
            return dt;
        }

失忆的烟的主页 失忆的烟 | 初学一级 | 园豆:8
提问于:2013-06-24 11:32
< >
分享
最佳答案
0

在此非常感谢 joewalker【http://joewalker.iteye.com/blog/277626】的文献,也感谢参与回答问题的亲。参照joewalker的方法我扑捉到了条件语句,得知上述问题中没有存在编码问题 而已是分页存储过程写的有错误【从网上找的,因为编译通过 也就没有仔细检查】。我在想为什么网上有很多文献资料 是故意写错 也许您的本意是好,让我们不要老想着只是ctrl+c 就了事,而是走一遍流程,但有很多时候,这样往往达不到那种效果,而导致很多学者浪费了很多时间,如果是真心分享,让大家共同进步,您可以用中文阐述流程,保留结构。再次感谢joewalker!

失忆的烟 | 初学一级 |园豆:8 | 2013-06-25 11:10
其他回答(5)
0

如果搜索英文能收到,有中文就搜不到的话。那么基本可以将问题定位为:编码问题。具体是哪边的编码问题还需要再具体分析下。

看你后面的描述没遇到显示问题。那么可以推断下,是否是搜索值本身的问题,所以你可以先断点测试下传到后台的值,是否有编码问题。

收获园豆:20
幻天芒 | 园豆:37175 (高人七级) | 2013-06-24 12:46
0

有可能你的中文传送过去,就是乱码了 看你的mysql数据库的编码是不是utf-8的 默认latin1的就是乱码的

收获园豆:20
chenping2008 | 园豆:9836 (大侠五级) | 2013-06-24 14:17

首先非常感谢的你的回答和对问题的定位,现在的问题是我现在不知道该如何去监控 “搜索关键字” 传输到mysql 执行编译查询时 是什么情况,不想mssql 有Profiler工具可以监控   如果mysql 也有类似的功能  可否提供相关知识 谢谢

支持(0) 反对(0) 失忆的烟 | 园豆:8 (初学一级) | 2013-06-24 15:09
0

跟踪下执行前的sql语句   啊 看看 传进去的搜索词是什么

收获园豆:20
世界万物 | 园豆:276 (菜鸟二级) | 2013-06-24 21:48
0

只能看sql语句了

收获园豆:20
小五毛 | 园豆:282 (菜鸟二级) | 2013-06-25 02:05

这个只能跟踪到程序的执行到方法的末尾,看到的搜索关键字还是中文,而且把这个条件写在mysql客户端工具执行 是可是查询到数据。 您说的看sql 语句没有太多意义(如果能监控到mysql 编译执行的sql语句 那问题就显而易见了),程序并没有打印出sql语句执行异常!

支持(0) 反对(0) 失忆的烟 | 园豆:8 (初学一级) | 2013-06-25 09:58
0

在数据库连接字符串中加charset=utf8句,如:connectionString = @"server=localhost;user id=root;password=123456;database=mydb;charset=utf8;";

ouyjp | 园豆:202 (菜鸟二级) | 2016-11-14 11:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册