或許很多人能和我一樣在使用mysql資料庫時會遇到這樣的問題,無法顯示中文字元,而且無法無法被載入進資料庫。
這就是程式員都會遇到的字元編碼問題,接下來以JAVA連結資料庫為列說明。
package fang.Demo;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import javax.swing.JPopupMenu.Separator;public class ConnectDemo04 {// 定義MySQL的資料庫驅動程式public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";// 定義MySQL資料庫的串連地址public static final String DBURL = "jdbc:mysql://localhost:3306/demo2";// MySQL資料庫的串連使用者名稱public static final String DBUSER = "root";// MySQL資料庫的串連密碼public static final String DBPASS = "";public static void main(String args[]) throws Exception { // 所有的異常拋出Connection conn = null; // 資料庫連接PreparedStatement stmt = null; // 資料庫操作ResultSet res = null;Class.forName(DBDRIVER); // 載入驅動程式String name = "方薩安" ;// 表示姓名String sql = "INSERT INTO userclob(name,note) VALUES (?,?) " ;Class.forName(DBDRIVER) ;// 載入驅動程式conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;stmt = conn.prepareStatement(sql) ;// 建立PreapredStatement對象File f = new File("d:" + File.separator + "test.txt") ;InputStream input = null ;input = new FileInputStream(f) ;// 通過輸入資料流讀取檔案stmt.setString(1,name) ;stmt.setAsciiStream(2,input,(int)f.length()) ;stmt.executeUpdate() ;conn.close() ;// 資料庫關閉}};
這個java程式讀取的是D盤目錄下的test.txt檔案
所報錯誤:
遇到這種問題可以看到錯誤提示是不正確的資料類型(大概是這個樣子),然後我試了試數字和英文字母均可成運行,並寫入資料庫庫
資料庫資料圖
由此可見,此問題必定是資料字元編碼不正確引起的,那麼如何解決呢?
從我建的資料表易知,他們都是utf8類型的國際化通用資料類型(推薦)
可是記事本的編碼呢?它是什麼類型?
但是……
但是我們卻是可以設定的開啟txt檔案點擊另存新檔—>設定編碼。
設定為資料編碼utf8
再次運行java程式
你會發現錯誤消失了,開啟資料庫檔案你會探索資料已經成功寫入資料表。
當然,網站報錯的原理和這是一樣的都是,資料表字元編碼設定的問題,大家認真設定下就OK了
設定詳見另一篇博文。