>  Q&A  >  본문

java中jdbc/sql出现编码问题

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);//执行该方法的时候就出现上面的乱码错误

PHPzPHPz2762일 전745

모든 응답(6)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 17:48:25

    먼저 문자 집합을 지정하는 sql 명령 "set names utf8"을 보낸 다음 삽입 작업을 수행합니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:48:25

    귀하의 데이터베이스 서버의 문자 집합은 무엇입니까? 문자셋을 확인하려면 데이터베이스 서버에서 다음 명령어를 실행하세요.

    으아악

    완료, 클라이언트가 제출한 데이터의 문자셋을 데이터베이스 서버의 문자셋과 동일하게 설정합니다...

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:48:25

    알겠습니다. 원래 jdbc 작업에서는 문자열을 작은따옴표로 묶어야 합니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:48:25

    MySQL 데이터베이스 서버와 클라이언트 모두 UTF-8 인코딩을 사용하는 것이 좋습니다. MySQL 서버 인코딩 및 클라이언트 연결 URL을 설정하는 방법은 다음과 유사합니다.

    으아악

    참조: utf8 문자 인코딩을 사용하기 위한 MySQL 구성용 JDBC URL

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:48:25

    String sql = "shopping_car(name,book_name) 값(?,?)에 삽입";
    stmt.setString(1, "123");
    stmt.setString(2, book_name);

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:48:25

    이런 방식으로 SQL을 사용하는 것은 권장되지 않습니다. 왜냐하면 SQL 주입이 발생하기 쉽기 때문입니다. mybatis, hibernate 등 다른 자리 표시자 방법, 즉 ORM을 사용하는 것이 좋습니다.
    수정:

    으아악

    회신하다
    0
  • 취소회신하다