【问题标题】:Unicode (Greek) characters are stored in the database like "??????"Unicode(希腊语)字符存储在数据库中,如“??????”
【发布时间】:2013-10-28 10:44:00
【问题描述】:

数据库中的希腊字符就像问号(“?????”)。我找不到解决方案。我使用 Java/Swing 开发了一个应用程序,但是当我在 MySQL 中插入希腊字母时,就像问号一样。我也将 db 排序规则更改为 utf8 和列。我的项目编码设置为 UTF-8。当我从 MySQL 插入希腊字母时,它们会被正确存储。

我正在使用 MySQL 连接器 jar 文件。

public class Testing {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    try {
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/chartest","root","1234");
        Statement pst=conn.createStatement();
        String var1="ασδασδ";
        String sql="INSERT INTO chars(value) values('"+var1+"')";
       pst.execute(sql);
    } catch (SQLException ex) {
        Logger.getLogger(Testing.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

【问题讨论】:

  • 请说明你如何连接到你的mysql服务器(你可能需要正确设置客户端编码)
  • 您是否为当前连接设置了客户端编码?

标签: java mysql jdbc


【解决方案1】:

我认为您只需要在创建连接时再添加几个参数(useUnicodecharacterEncoding)。以下代码适用于我:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;

public class GreekTestMain {

    public static void main(String[] args) {
        String connUrl = 
                "jdbc:mysql://192.168.1.3/greektest?" +
                "useUnicode=yes&characterEncoding=UTF-8" +
                "&user=root&password=obfuscated";
        try (Connection conn = DriverManager.getConnection(connUrl)) {
            String sql = "INSERT INTO `chars` (`value`) VALUES (?)";
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setString(1, "ασδασδ");
            pst.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

}

【讨论】:

  • 非常感谢您,MATE由于当前的问题。我无法投票,因为我需要 15+ 的声誉。再次感谢您 :)
  • 这个答案帮助我解决了将希腊字符保存到数据库中的问题。我可以确认这可能是一个很好的解决方案。感谢您的帮助!
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2017-04-23
  • 2016-06-03
相关资源
最近更新 更多