gpt4 book ai didi

java - 如何将特殊字符保存到字符串中?

转载 作者:行者123 更新时间:2023-11-29 12:04:46 26 4
gpt4 key购买 nike

我做了应用程序,我必须将用户保存在mysql中但是当用户在 mysql 中具有这样的名称“Michał”(带有波兰字符)时,他会像这样保存“Micha?”如何改变这个?在 mysql 中我有 enconding 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);
}

最佳答案

问号由此而来:

  • 客户具有有效的品格(良好),并且
  • SET NAMES 与客户端的编码一致(很好),但是
  • 目标列的CHARACTER SET 不包含预期字符(错误)。

示例:

  • latin1 仅处理西欧字符;试将东欧字符或任何亚洲字符放入它不适合。
  • latin2cp1250 可以处理捷克语,因此它们之间的转换大部分都可以,但不在它们和 latin1
  • 之间
  • utf8mb4utf8 的超集。将utf8字符放入utf8mb4是可以的,反之亦然会产生一个“?”在某些情况下。

转换为“?”的字符无法从表中恢复。

如何修复 future 的INSERT

  • 在表列上使用 utf8mb4 可能适用于所有情况。
  • 否则,请为表列选择一些与客户端数据合理匹配的字符集

编码:

HEX('Michał') is '4D69636861C582'  'C582' is utf8 for 'ł'

底线:更改表的字符集

关于java - 如何将特殊字符保存到字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com