新聞中心
MSSQL亂碼現(xiàn)象在實(shí)際開發(fā)中經(jīng)常出現(xiàn),給開發(fā)者帶來極大挑戰(zhàn),我們當(dāng)然要積極解決這個(gè)問題,下面就來介紹解決mssql亂碼問題的路。

1. 解決數(shù)據(jù)庫亂碼問題
解決MSSQL中亂碼問題,首先應(yīng)知曉數(shù)據(jù)庫字符串是在Unicode存儲的,而程序中發(fā)出的請求默認(rèn)是以ANSI字符集發(fā)出,因?yàn)閁NICODE和ANSI有很大的不同,所以產(chǎn)生了亂碼。因此,解決數(shù)據(jù)庫亂碼的關(guān)鍵就是將程序的請求字符串轉(zhuǎn)換為UNICODE,實(shí)現(xiàn)這一轉(zhuǎn)換的方法有很多,主要包括以下幾種:
A. 使用sys.fn_varbintohexstr函數(shù),將ANSI字符串轉(zhuǎn)換為UNICODE:
SELECT sys.fn_varbintohexstr(N’字符串’)
B. 通過CAST或CONVERT函數(shù),將ANSI轉(zhuǎn)換為UNICODE:
SELECT CAST(‘字符串’ as nvarchar(max))
2. 解決應(yīng)用層亂碼問題
此外,由于MSSQL在存儲的時(shí)候是以UNICODE字符集進(jìn)行存儲的,且程序?qū)油訟NSI字符集進(jìn)行編碼發(fā)出,所以,程序?qū)咏邮盏降臄?shù)據(jù)也有可能出現(xiàn)亂碼的情況,這個(gè)時(shí)候就需要調(diào)整程序?qū)幼址?,將其設(shè)置為UNICODE。這里以Java和C#為例,可以使用以下代碼來解決亂碼問題:
A. Java程序
String str = “字符串”;
String sql = “select * from table where str=?”;
PreparedStatement pstmt = conn.prepareStatement(sql);
//設(shè)置字符集為UTF-8
pstmt.setCharacterStream(1,new InputStreamReader(new ByteArrayInputStream(str.getBytes(“UTF-8”))));
B. C#程序
String str = “字符串”;
String sql = “select * from table where str=@str”;
SqlCommand command = new SqlCommand(sql, conn);
//設(shè)置字符集為UTF-8
command.Parameters.Add(“@str”, SqlDbType.NVarChar).Value = str;
以上就是解決MSSQL亂碼問題的解決之路,主要包括以下兩個(gè)方面:一是調(diào)整數(shù)據(jù)庫字符串,二是調(diào)整程序?qū)幼址瑢⑵湓O(shè)置為UNICODE。只有全面考慮到1和2兩個(gè)方面,MSSQL亂碼問題才能得到妥善的解決。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁標(biāo)題:MSSQL亂碼問題:解決之路(mssql亂碼)
文章源于:http://www.dlmjj.cn/article/codcjds.html


咨詢
建站咨詢
