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