數據庫中文亂碼及分析


數據庫出現亂碼主要是因為服務器端與客戶端,或者是數據庫本身編碼不同造成的。

主要的情況如下:

一.mysql數據庫的問題

測試:

  使用mysql -u root -p登錄數據庫,輸入

 我這個是改完之后的,保證所有的都是utf8.

 方法是:

Mac:

  找到安裝路徑下的my.cnf文件,到/usr/local/mysql/support-files目錄下將mac上的mysql配置文件模板my-default.cnf拷貝到/etc下,並將文件名改成my.cnf,之后用文本編輯器打開,添加一下內容。后面兩個要放到文件最后,要不會啟動不了mysql。之后保存,測試一下是否可以使用

 

[mysqld]

character-set-server=utf8  #注意這行不要寫成 default-character-set=utf8

[client]

default-character-set=utf8

[mysql]

no-auto-rehash 

 

windows:

找到my.ini文件位於C:\ProgramData\MySQL\MySQL Server 5.1目錄下,如果找不到就在命令行MySQL 5.6 Command Line Client的快捷方式配置中(也就是右擊找到屬性),查看目標一欄,這個就是my.ini的地址

 

二.navicat的問題(其他數據庫工具沒用過,可能也有這個問題)

步驟與mysql相同,這是修改完之后的,如果不一樣就是這個的問題了(折騰了一下午,就是這個問題)

     

解決:

  在上面的步驟(也包括第一個)無誤的基礎上,重啟mysql

Mac:

sudo /usr/local/mysql/support-files/mysql.server restart 

 

windows:

net stop mysql;停止mysql

net start mysql;啟動mysql

 

 

 

在navicat中創建新的連接,設定編碼集為自動或者是utf8都可以,之后就可以了

————————————————————————————————————————————————————————————————————————————————————

之后的就是頁面方向出現的問題了,如果確認多次頁面接收沒有問題,基本可以不用看

————————————————————————————————————————————————————————————————————————————————————

三.jsp—— >servlet的問題(也有可能是另一個接收數據的jsp頁面)

 

  測試

      在接收端將接收到的數據使用system.out.print()輸出

 

  結果和操作:

    1.如果產生亂碼:在接收頁面之前使用,下面兩行代碼

      request.setCharacterEncoding("UTF-8");

            response.setContentType("text/html;charset=utf-8");之后就可以照常使用set函數對變量進行賦值了。

 

    2.如果沒有產生亂碼:該層次亂碼可能性排除

 

 

二.Dao層的問題(也就是在java中寫的數據庫語句的部分)

   測試

      在dao層中將接收到的數據使用system.out.print()輸出,也就是這個地方

 

  結果和操作:

    出現的可能性不大,我沒有出現過(如果出現歡迎在評論區補充)

三.Connection的問題(沒有遇見過,不過網上有的給出過關於這個的答案)

   結果和操作:

     在connection的url之后添加

     ?useUnicode=true&characterEncoding=utf-8

     當然如果你連接數據庫的方式和我一樣,有useSSL=false的話,你還要在后面再加一個&,如圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM