検索

ホームページ  >  に質問  >  本文

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

PHPzPHPz2889日前820

全員に返信(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) に挿入 value(?,?)";
    stmt.setString(1, "123");
    stmt.setString(2, book_name);

    返事
    0
  • 迷茫

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

    SQL インジェクションが発生しやすいため、この方法で SQL を使用することはお勧めできません。mybatis、hibernate などの別のプレースホルダー メソッド、または ORM を使用することをお勧めします。
    訂正:

    リーリー

    返事
    0
  • キャンセル返事