java中jdbc/sql出现编码问题
PHPz
PHPz 2017-04-17 17:46:25
0
6
695

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

PHPz
PHPz

学习是最好的投资!

全部回覆 (6)
巴扎黑

先發送一條指定字元集的sql指令 “set names utf8” ,再進行插入操作。

    Ty80

    你資料庫伺服器字元集是啥?在資料庫伺服器執行以下指令查看一下字元集先:

    SHOW VARIABLES LIKE 'CHAR%';

    完了將客戶端提交的資料的字元集設為和資料庫伺服器字元集一樣...

      左手右手慢动作

      弄好了,原來在原始的jdbc操作中字串一定要用單引號引起

        迷茫

        建議 MySQL 資料庫服務端和客戶端都使用UTF-8編碼,MySQL 服務端編碼和客戶端連接URL如何設置,類似如下:

        url="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"

        參考:JDBC url for MySQL configuration to use utf8 character encoding

          PHPzhong

          String sql = "insert into shopping_car(name,book_name)values(?,?)";
          stmt.setString(1, "123");
          stmt.setString(2, book_name);

            迷茫

            不建議這樣使用 sql,因為容易發生 sql 注入,推薦使用另一種佔位符的方式,或者是 orm,例如 mybatis,hibernate 等。
            改正:

            String sql = "insert into shopping_car(name,book_name) values(\"123\","+book_name+")"
              最新下載
              更多>
              網站特效
              網站源碼
              網站素材
              前端模板
              關於我們 免責聲明 Sitemap
              PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!