我有一个java应用程序,想要将阿拉伯语单词插入mysql数据库,我的代码看起来像
Connection con = null;
String url = "jdbc:mysql://localhost/";
String db = "students";
String driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver);
con = DriverManager.getConnection(url+db,"root","");
Statement st = con.createStatement();
String name = new String(txtName.getText().getBytes(), "UTF-8");
int val = st.executeUpdate("insert into student(name, roll) VALUES('"+name+"','"+txtRoll.getText()+"')");
} catch (Exception ex) {
ex.printStackTrace();
}
但它只插入'??????'。我现在该怎么办?
答案 0 :(得分:19)
在db变量声明后添加此变量:
String unicode= "?useUnicode=yes&characterEncoding=UTF-8";
然后修改你的行:
con = DriverManager.getConnection(url+db,"root","");
到
con = DriverManager.getConnection(url+db+unicode,"root","");
答案 1 :(得分:1)
我面临同样的问题,但是使用中文数据,并且不仅数据库连接中的UTF8是解决方案,您还应该这样做:
确保正确定义了MySQL配置编码。将这些行添加到my.cnf “如果使用linux”或my.ini “使用Windows的情况”
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
character-set-server=utf8
答案 2 :(得分:0)
您必须将数据库创建为UTF-8表,否则无论您添加什么,它都将永远无法存储...
第二,你需要在保存之前对其进行编码,我喜欢使用unicode ...有一件事是,如果你有一个指定32长度的列,你将不得不将unicode增加为单个字符占用6个字符,
例如
字母h显示为U + 0068
答案 3 :(得分:0)
@maerics我尝试使用PreparedStatement而SQL注入攻击仍然可以完成,我认为要么实现PreparedStatemnt错误,要么你的提要不正确。