现改写一项目,数据库是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;
}
在此非常感谢 joewalker【http://joewalker.iteye.com/blog/277626】的文献,也感谢参与回答问题的亲。参照joewalker的方法我扑捉到了条件语句,得知上述问题中没有存在编码问题 而已是分页存储过程写的有错误【从网上找的,因为编译通过 也就没有仔细检查】。我在想为什么网上有很多文献资料 是故意写错 也许您的本意是好,让我们不要老想着只是ctrl+c 就了事,而是走一遍流程,但有很多时候,这样往往达不到那种效果,而导致很多学者浪费了很多时间,如果是真心分享,让大家共同进步,您可以用中文阐述流程,保留结构。再次感谢joewalker!
如果搜索英文能收到,有中文就搜不到的话。那么基本可以将问题定位为:编码问题。具体是哪边的编码问题还需要再具体分析下。
看你后面的描述没遇到显示问题。那么可以推断下,是否是搜索值本身的问题,所以你可以先断点测试下传到后台的值,是否有编码问题。
有可能你的中文传送过去,就是乱码了 看你的mysql数据库的编码是不是utf-8的 默认latin1的就是乱码的
首先非常感谢的你的回答和对问题的定位,现在的问题是我现在不知道该如何去监控 “搜索关键字” 传输到mysql 执行编译查询时 是什么情况,不想mssql 有Profiler工具可以监控 如果mysql 也有类似的功能 可否提供相关知识 谢谢
跟踪下执行前的sql语句 啊 看看 传进去的搜索词是什么
只能看sql语句了
这个只能跟踪到程序的执行到方法的末尾,看到的搜索关键字还是中文,而且把这个条件写在mysql客户端工具执行 是可是查询到数据。 您说的看sql 语句没有太多意义(如果能监控到mysql 编译执行的sql语句 那问题就显而易见了),程序并没有打印出sql语句执行异常!
在数据库连接字符串中加charset=utf8句,如:connectionString = @"server=localhost;user id=root;password=123456;database=mydb;charset=utf8;";