我做了aplication,我必须在mysql中保存用户 但是当用户在mysql中有这样的名字“Michał”(带有波兰字符)时,他就像这样保存“Micha?”怎么改变这个?在mysql中,我已经加入了utf-8。
这是我的代码:
public void save() {
Connection conn = Main.getMySQL().getConnection();
if (conn == null) {
try {
conn = Main.getMySQL().openConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
PreparedStatement st = null;
StringBuilder query = new StringBuilder();
query.append("INSERT INTO `HelperTime` (`uid`, `name`,`time`,`idletime`) ")
.append("VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE ")
.append(" `uid`=VALUES(`uid`), `name`=VALUES(`name`), `time`=VALUES(`time`), ")
.append("`idletime`=VALUES(`idletime`)");
try {
st = conn.prepareStatement(query.toString());
st.setString(1, uid);
st.setString(2, name);
st.setLong(3, time);
st.setLong(4, idleTime);
st.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
Main.getMySQL().closeResources(null, st);
}
答案 0 :(得分:1)
问号来自:
SET NAMES
同意客户端的编码(好),但CHARACTER SET
不包含预期字符(错误)。示例:
latin1
仅处理西欧角色;试
将东欧角色或任何亚洲角色放入
它不会适合。latin2
和cp1250
可以处理捷克语,因此它们之间的转换大多数都可以,
但不在它们之间和latin1
utf8mb4
是utf8
的超集。
将utf8字符放入utf8mb4是可以的,但相反
会产生一个'?'在某些情况下。转换为'?'的字符无法从表中恢复。
如何修复未来INSERTs
?
utf8mb4
可能适用于所有情况。CHARACTER SET
。编码:
HEX('Michał') is '4D69636861C582' 'C582' is utf8 for 'ł'
底线:更改表格的CHARACTER SET
。