com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column '???è??é“?è??' in 'field list'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
at ...
我其他地方以及传进SQL里面的参数的编码都没有问题,就是执行jdbc中的executeUpdate()方法执行sql插入数据时就出现这个问题。
比如:
String book_name = request.getParameter("book_name");//中文显示正常
String sql = "insert into shopping_car(name,book_name) values("123",book_name)";//编码显示正常,为中文
stmt.executeUpdate(sql);//执行该方法的时候就出现上面的乱码错误
Mula-mula hantar arahan sql "set names utf8" menyatakan set aksara, dan kemudian lakukan operasi sisipan.
Apakah set aksara pelayan pangkalan data anda? Jalankan arahan berikut pada pelayan pangkalan data untuk menyemak set aksara:
Selesai, tetapkan set aksara data yang diserahkan oleh klien agar sama dengan set aksara pelayan pangkalan data...
Baiklah, ternyata dalam operasi jdbc asal, rentetan mesti disertakan dalam petikan tunggal
Adalah disyorkan bahawa kedua-dua pelayan pangkalan data MySQL dan pelanggan menggunakan pengekodan
UTF-8
Cara menetapkan pengekodan pelayan MySQL dan URL sambungan pelanggan adalah serupa dengan yang berikut:Rujukan: url JDBC untuk konfigurasi MySQL untuk menggunakan pengekodan aksara utf8
String sql = "insert into shopping_car(name,book_name) values(?,?)";
stmt.setString(1, "123");
stmt.setString(2, book_name);
Tidak digalakkan untuk menggunakan sql dengan cara ini, kerana suntikan sql mudah berlaku Adalah disyorkan untuk menggunakan kaedah ruang letak lain, atau ORM, seperti mybatis, hibernate, dll.
Pembetulan: