mysql数据库是对大小写不敏感的,但是如果是圆角的大小写就会区分大小写,如何解决呢?
1.因为前端传来的一般都是半角,这里做一个转化,半角转全角下面是工具类
/**
* 数据转换的工具类
* @author haoHongBo
*
*/
public class AsciiUtil {
public static final char SBC_SPACE = 12288; // 全角空格 12288
public static final char DBC_SPACE = 32; //半角空格 32
// ASCII character 33-126 <-> unicode 65281-65374
public static final char ASCII_START = 33;
public static final char ASCII_END = 126;
public static final char UNICODE_START = 65281;
public static final char UNICODE_END = 65374;
public static final char DBC_SBC_STEP = 65248; // 全角半角转换间隔
public static char sbc2dbc(char src){
if (src == SBC_SPACE) {
return DBC_SPACE;
}
if (src >= UNICODE_START && src <= UNICODE_END) {
return (char) (src - DBC_SBC_STEP);
}
return src;
}
/**
* Convert from SBC case to DBC case
*
* @param src
* @return DBC case
*/
public static String sbc2dbcCase(String src) {
if (src == null) {
return null;
}
char[] c = src.toCharArray();
for (int i = 0; i < c.length; i++) {
c[i] = sbc2dbc(c[i]);
}
return new String(c);
}
public static char dbc2sbc(char src){
if (src == DBC_SPACE) {
return SBC_SPACE;
}
if (src <= ASCII_END) {
return (char) (src + DBC_SBC_STEP);
}
return src;
}
/**
* Convert from DBC case to SBC case.
*
* @param src
* @return SBC case string
*/
public static String dbc2sbcCase(String src) {
if (src == null) {
return null;
}
char[] c = src.toCharArray();
for (int i = 0; i < c.length; i++) {
c[i] = dbc2sbc(c[i]);
}
return new String(c);
}
}
2.转换为全角的字母和数字,要和数据库忽略大小写
做一个.toLowerCase()方法,将原字符串,和转换为圆角的字符串,传到后台。
3.mybatis中进行查询
content like "%"#{autoVoiceData.content}"%" or LOWER(content) like "%"#{quanJiao}"%"
这段sql的前一段是mysql的正常查询,忽略大小写,后边部分是圆角的模糊查询,因为圆角是不忽略大小写的,所以要有一个LOWER()方法。
ok~这样就可以解决了