關於從JSP頁面插入資料到資料庫中亂碼問題的解決

來源:互聯網
上載者:User

標籤:

問題描述:最近我在寫一個j2ee的留言板系統模組,遇到了一個非常讓我頭大的問題,當我從JSP頁面輸入資料後,通過hibernate中的商務邏輯類HQL語句把這個資料插入到本地的mysql資料庫中,可是當我發現成功插入後在資料庫中看到的是亂碼,再回顯到瀏覽頁面中看到的也是一堆亂碼,我的jsp版面設定編碼為UTF-8,如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

然後我查看我本地的資料庫編碼方式也為UTF-8,如下:

  操作 行數 類型 定序 大小 多餘
tb_manager    瀏覽  結構  搜尋  插入  清空  刪除 2 InnoDB utf8_general_ci 16 KB -
tb_reply    瀏覽  結構  搜尋  插入  清空  刪除 5 InnoDB utf8_general_ci 16 KB -
tb_topic    瀏覽  結構  搜尋  插入  清空  刪除 19 InnoDB utf8_general_ci 16 KB  

可是問題還是沒有解決,我各種百度都沒能解決,我就想,資料是在插入的資料庫前就已經亂碼還是插入到資料庫後才亂碼的呢?

於是我就在插入資料庫前把要插入的資料列印到控制台,果然是一堆亂碼。網上說一般頁面的編碼是ISO-8859-1我就寫了一個方法把擷取到資料先轉換為UTF-8在插入到資料庫中

方法的代碼如下:

public String toChinese(String strvalue){
        try {
            if (strvalue==null||strvalue.equals("")) {
                return "";
            } else {
            strvalue = new String(strvalue.getBytes("ISO8859_1"), "UTF-8");
            return strvalue;
            }
        } catch (Exception e) {
            return "";
        }
        
    }

 

寫完後再次插入資料後把轉換後的資料列印到控制台,發現亂碼已經成功轉換為中文了,可是問題又來了,資料庫中的數還是亂碼,這時我就明白了(資料在插入前插入後都會經過編碼轉換),好坑爹啊(*^__^*) ,jsp頁面上輸入的資料會把資料轉換為ISO8859-1,插入到資料庫的過程還會把這個資料轉換為另一種編碼,中間會經過多少次編碼的轉換我真搞不懂O(∩_∩)O~我在資料庫中寫了這個 sql語句

show variables like ‘char%‘;結果為

Variable_name Value  
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database latin1
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\

一看才知道資料庫不是UTF-8的啊,我去O(∩_∩)O~,這個顯示我的資料庫設定的編碼是Latin1,我真是醉了Latin1就是ISO-88859-1的別名啊,前面白轉了,。後來在我的hibernate設定檔中加了這個東西,把資料庫連接設定為UTF-8就把問題解決了

<!-- 資料庫連接的URL -->
        <property name="connection.url">jdbc:mysql://localhost:3306/db_board?useUnicode=true&amp;characterEncoding=utf-8 </property>
       上面的斜線部分

再次用show variables like ‘char%‘;查詢我的資料庫編碼,結果如下:

Variable_name Value  
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\

最後再次測試,插入到資料庫中的數資料終於完美顯示為中文了,真是~~o(>_<)o ~~淚奔,這個問題搞了我兩天,早上睡不著5點多醒來就搞,也是佩服我自己,最後美美的睡了一覺,O(∩_∩)O哈哈~

總結:其實回過頭來看,我一開始就錯誤的以為自己的資料庫是UTF-8,把定序錯誤的以為就是UTF-8,其實用show variables like ‘char%‘;才能知道你的資料庫編碼方式是啥,其實我上面的寫的方法就是把JSP頁面的擷取到的資料編碼從UTF-8轉換為ISO-8859-1,之後再插入到資料庫中,會亂碼只是資料庫沒有設定為UTF-8而已,把hibernate設定檔的資料庫連接後面加上?useUnicode=true&amp;characterEncoding=utf-8這句話就好了,這樣就把資料庫編碼設定為UTF-8了

關於從JSP頁面插入資料到資料庫中亂碼問題的解決

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.