昨天搞这个问题搞了一个晚上,还是没弄好,心塞塞,网上找了各种方法,都没有解决,现在已经找到了解决的办法。
我的查询条件是“第2周(2019年9月9日-12日)”,然后发现一个“第2周”也无法查询,但是数字可以查询,所以可以确定是中文查询的问题了。
成功解决的办法,用一下代码处理输入的字符串,我这里是n1。
try{
.....
if(n1==null){n1="";}byte b[]=n1.getBytes("ISO-8859-1"); n1=new String(b);
String condition="SELECT * FROM 个人档案1128 WHERE 档案时段 = '"+n1+"'";
....
}
catch(UnsupportedEncodingException e){
e.printStackTrace();return buffer;
}
然后就可以实现精确查询有中文的查询条件了。
注意一下!我MySQL当时配置的时候 Character Set选的是gb2312。jsp文件开头还有这句:
<%@ page contentType="text/html;charset=GB2312" %>
我做的查询档案,用的中文的查询条件,然后我发现其实删除档案也是用的中文条件来删除的,可是为什么行了呢?其实昨晚也有试了跟这个挺像的一个方法,然后也没行,是下面这个方法:
byte[] b=n1.getBytes("ISO-8859-1"); n1=new String(b, "UTF-8");
....
catch(UnsupportedEncodingException e){
e.printStackTrace();return buffer;
}
网上找的,可是我不行,难道是因为我当时字符集不是设置为UTF-8吗?不太懂。
另外,还有别的同学提供的用模糊查询,以下:
String condition="SELECT * FROM 个人档案1128 WHERE 档案时段 = '_"+n1+"%'";
String condition="SELECT * FROM 个人档案1128 WHERE 档案时段 = '%"+n1+"%'";
然后比如要查询“第2周”,可以输入“2”,别人成功了,但是我不行hhhh。
然后还有一个方法是在中文字符串前面加个字母N。如下:
String condition="SELECT * FROM 个人档案1128 WHERE 档案时段 = N'"+n1+"'";
这个方法好像是因为数据类型是nchar,nvarchar之类的,而我的数据类型是char,所以并不行,哎。
还有一种方法是在url后面加一句设置字符串的代码,如下:
con=DriverManager.getConnection("jdbc:mysql://localhost/人事档案?useUnicode=true&characterEncoding=UTF-8","root","admin");
这个方法我也是不行,现在看来也是UTF-8的问题。
还有的方法就是改MySQL的my.ini文件了,如下
在[client]下加:
default-character-set=utf8
在[mysqld]下加:
character-set-server=utf8
在[mysql]下加:
default-character-set=utf8
这个没敢试,改配置文件啥的。
基本上我尝试过的方法就这些了,终于解决了,太开心了,就是经验记录一下吧,仅供参考哦。
新增,老师的建议,解决中文乱码
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
<%request.setCharacterEncoding("gbk"); %>