或許很多人能和我一樣在使用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了
設置詳見另一篇博文。