昨天搞這個(gè)問(wèn)題搞了一個(gè)晚上,還是沒(méi)弄好潭袱,心塞塞,網(wǎng)上找了各種方法锋恬,都沒(méi)有解決屯换,現(xiàn)在已經(jīng)找到了解決的辦法。
我的查詢條件是“第2周(2019年9月9日-12日)”与学,然后發(fā)現(xiàn)一個(gè)“第2周”也無(wú)法查詢彤悔,但是數(shù)字可以查詢,所以可以確定是中文查詢的問(wèn)題了索守。
成功解決的辦法晕窑,用一下代碼處理輸入的字符串,我這里是n1卵佛。
try{
.....
if(n1==null){n1="";}byte b[]=n1.getBytes("ISO-8859-1"); n1=new String(b);
String condition="SELECT * FROM 個(gè)人檔案1128 WHERE 檔案時(shí)段 = '"+n1+"'";
....
}
catch(UnsupportedEncodingException e){
e.printStackTrace();return buffer;
}
然后就可以實(shí)現(xiàn)精確查詢有中文的查詢條件了杨赤。
注意一下!我MySQL當(dāng)時(shí)配置的時(shí)候 Character Set選的是gb2312截汪。jsp文件開(kāi)頭還有這句:
<%@ page contentType="text/html;charset=GB2312" %>
我做的查詢檔案疾牲,用的中文的查詢條件,然后我發(fā)現(xiàn)其實(shí)刪除檔案也是用的中文條件來(lái)刪除的衙解,可是為什么行了呢阳柔?其實(shí)昨晚也有試了跟這個(gè)挺像的一個(gè)方法,然后也沒(méi)行蚓峦,是下面這個(gè)方法:
byte[] b=n1.getBytes("ISO-8859-1"); n1=new String(b, "UTF-8");
....
catch(UnsupportedEncodingException e){
e.printStackTrace();return buffer;
}
網(wǎng)上找的舌剂,可是我不行,難道是因?yàn)槲耶?dāng)時(shí)字符集不是設(shè)置為UTF-8嗎枫匾?不太懂架诞。
另外,還有別的同學(xué)提供的用模糊查詢干茉,以下:
String condition="SELECT * FROM 個(gè)人檔案1128 WHERE 檔案時(shí)段 = '_"+n1+"%'";
String condition="SELECT * FROM 個(gè)人檔案1128 WHERE 檔案時(shí)段 = '%"+n1+"%'";
然后比如要查詢“第2周”,可以輸入“2”很泊,別人成功了角虫,但是我不行hhhh。
然后還有一個(gè)方法是在中文字符串前面加個(gè)字母N委造。如下:
String condition="SELECT * FROM 個(gè)人檔案1128 WHERE 檔案時(shí)段 = N'"+n1+"'";
這個(gè)方法好像是因?yàn)閿?shù)據(jù)類型是nchar戳鹅,nvarchar之類的,而我的數(shù)據(jù)類型是char昏兆,所以并不行枫虏,哎。
還有一種方法是在url后面加一句設(shè)置字符串的代碼,如下:
con=DriverManager.getConnection("jdbc:mysql://localhost/人事檔案?useUnicode=true&characterEncoding=UTF-8","root","admin");
這個(gè)方法我也是不行隶债,現(xiàn)在看來(lái)也是UTF-8的問(wèn)題腾它。
還有的方法就是改MySQL的my.ini文件了,如下
在[client]下加:
default-character-set=utf8
在[mysqld]下加:
character-set-server=utf8
在[mysql]下加:
default-character-set=utf8
這個(gè)沒(méi)敢試死讹,改配置文件啥的瞒滴。
基本上我嘗試過(guò)的方法就這些了,終于解決了赞警,太開(kāi)心了妓忍,就是經(jīng)驗(yàn)記錄一下吧,僅供參考哦愧旦。
新增世剖,老師的建議,解決中文亂碼
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
<%request.setCharacterEncoding("gbk"); %>