这里介绍两种解决方式,
1.修改数据库字段
2.对字符转译
第一种方式
1、先去改动表字段字符集为utf8mb4:
ALTER TABLE user MODIFY `username` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
运行完后,再在手机端的app測试,依旧报相同的错误。
2、再去改动表字符集utf8mb4:
ALTER TABLE user CHARSET=utf8mb4 ;
运行完后,再在手机端的app測试,依旧报相同的错误。
3,再去改动数据库的字符集utf8mb4:
vim /etc/mysql/my.cnf (每个人的不一样,这是我的)
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
重新启动mysql数据库
第二种方式
//write by raoyy (这是大神的代码)
public class ChartUtil {
public static String bytes2HexString(byte[] b, int ipos, int len) {
if (ipos + len > b.length) return null;
StringBuilder ret = new StringBuilder(); // "";
for (int i = ipos; i < ipos + len; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret.append(hex.toLowerCase());
}
return ret.toString();
}
//把十六进制的字符转化为HexString
public static byte[] hexStringToBytes(String hexStr) { //java
int len = hexStr.length();
if (len % 2 != 0 || len == 0) {
return null;
}
//hexStr = hexStr.toUpperCase();
byte[] des;
int halfLen = len / 2;
des = new byte[halfLen];
char[] tempChars = hexStr.toCharArray();
for (int i = 0; i < halfLen; ++i) {
char c1 = tempChars[i * 2];
char c2 = tempChars[i * 2 + 1];
int tempI = 0;
if (c1 >= '0' && c1 <= '9') {
tempI += ((c1 - '0') << 4);
} else if (c1 >= 'A' && c1 <= 'F') {
tempI += (c1 - 'A' + 10) << 4;
} else if (c1 >= 'a' && c1 <= 'f') {
tempI += (c1 - 'a' + 10) << 4;
} else {
return null;
}
if (c2 >= '0' && c2 <= '9') {
tempI += (c2 - '0');
} else if (c2 >= 'A' && c2 <= 'F') {
tempI += (c2 - 'A' + 10);
} else if (c2 >= 'a' && c2 <= 'f') {
tempI += (c2 - 'a' + 10);
} else {
return null;
}
des[i] = (byte) tempI;
}
// System.out.println(des[i]);
return des;
}
在dao类里面