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);//执行该方法的时候就出现上面的乱码错误
Envoyez d'abord une commande SQL "set names utf8" spécifiant le jeu de caractères, puis effectuez l'opération d'insertion.
Quel est le jeu de caractères de votre serveur de base de données ? Exécutez la commande suivante sur le serveur de base de données pour vérifier le jeu de caractères :
Terminé, définissez le jeu de caractères des données soumises par le client pour qu'il soit le même que le jeu de caractères du serveur de base de données...
D'accord, il s'avère que dans l'opération jdbc originale, la chaîne doit être placée entre guillemets simples
Il est recommandé que le serveur de base de données MySQL et le client utilisent l'encodage
.UTF-8
. La façon de définir l'encodage du serveur MySQL et l'URL de connexion du client est similaire à ce qui suit :Référence : URL JDBC pour la configuration MySQL afin d'utiliser le codage de caractères utf8
String sql = "insérer dans les valeurs shopping_car(name,book_name) (?,?)";
stmt.setString(1, "123");
stmt.setString(2, book_name);
Il n'est pas recommandé d'utiliser SQL de cette manière, car l'injection SQL est facile à réaliser. Il est recommandé d'utiliser une autre méthode d'espace réservé, ou ORM, telle que mybatis, hibernate, etc.
Correction :