【问题标题】:How to save special chars to string?如何将特殊字符保存到字符串?
【发布时间】:2015-07-29 16:04:31
【问题描述】:

我做了一个应用程序,我必须将用户保存在 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);
}

【问题讨论】:

  • 您使用什么编程语言?你的代码是什么样的?当您将输入字符串传递给 MySQL 时,您的输入字符串是否已经采用 UTF-8 格式?请提供更多详细信息。
  • 我在java中编程,但我必须将用户名保存到mysql
  • 再次,请显示您正在使用的实际代码。
  • pastebin.com/CvKhPbe4 我必须使用粘贴,因为这段代码有很多字符,当我将名称保存到 mysql 时,它会将特殊字符更改为“???”
  • 该代码甚至没有太多字符可以发布在 StackOverflow 上。我现在已经把它放在你的问题中了。

标签: java mysql string utf-8


【解决方案1】:

问号由此而来:

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

例子:

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

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

如何修复未来的INSERTs

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

编码:

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

底线:更改表格的CHARACTER SET

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2013-03-08
    相关资源
    最近更新 更多