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);//执行该方法的时候就出现上面的乱码错误
먼저 문자 집합을 지정하는 sql 명령 "set names utf8"을 보낸 다음 삽입 작업을 수행합니다.
귀하의 데이터베이스 서버의 문자 집합은 무엇입니까? 문자셋을 확인하려면 데이터베이스 서버에서 다음 명령어를 실행하세요.
으아악완료, 클라이언트가 제출한 데이터의 문자셋을 데이터베이스 서버의 문자셋과 동일하게 설정합니다...
알겠습니다. 원래 jdbc 작업에서는 문자열을 작은따옴표로 묶어야 합니다.
MySQL 데이터베이스 서버와 클라이언트 모두
으아악UTF-8
인코딩을 사용하는 것이 좋습니다. MySQL 서버 인코딩 및 클라이언트 연결 URL을 설정하는 방법은 다음과 유사합니다.참조: utf8 문자 인코딩을 사용하기 위한 MySQL 구성용 JDBC URL
String sql = "shopping_car(name,book_name) 값(?,?)에 삽입";
stmt.setString(1, "123");
stmt.setString(2, book_name);
이런 방식으로 SQL을 사용하는 것은 권장되지 않습니다. 왜냐하면 SQL 주입이 발생하기 쉽기 때문입니다. mybatis, hibernate 등 다른 자리 표시자 방법, 즉 ORM을 사용하는 것이 좋습니다.
으아악수정: