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

1. 解決數(shù)據(jù)庫(kù)亂碼問(wèn)題
解決MSSQL中亂碼問(wèn)題,首先應(yīng)知曉數(shù)據(jù)庫(kù)字符串是在Unicode存儲(chǔ)的,而程序中發(fā)出的請(qǐng)求默認(rèn)是以ANSI字符集發(fā)出,因?yàn)閁NICODE和ANSI有很大的不同,所以產(chǎn)生了亂碼。因此,解決數(shù)據(jù)庫(kù)亂碼的關(guān)鍵就是將程序的請(qǐng)求字符串轉(zhuǎn)換為UNICODE,實(shí)現(xiàn)這一轉(zhuǎn)換的方法有很多,主要包括以下幾種:
A. 使用sys.fn_varbintohexstr函數(shù),將ANSI字符串轉(zhuǎn)換為UNICODE:
SELECT sys.fn_varbintohexstr(N’字符串’)
B. 通過(guò)CAST或CONVERT函數(shù),將ANSI轉(zhuǎn)換為UNICODE:
SELECT CAST(‘字符串’ as nvarchar(max))
2. 解決應(yīng)用層亂碼問(wèn)題
此外,由于MSSQL在存儲(chǔ)的時(shí)候是以UNICODE字符集進(jìn)行存儲(chǔ)的,且程序?qū)油訟NSI字符集進(jìn)行編碼發(fā)出,所以,程序?qū)咏邮盏降臄?shù)據(jù)也有可能出現(xiàn)亂碼的情況,這個(gè)時(shí)候就需要調(diào)整程序?qū)幼址?,將其設(shè)置為UNICODE。這里以Java和C#為例,可以使用以下代碼來(lái)解決亂碼問(wèn)題:
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亂碼問(wèn)題的解決之路,主要包括以下兩個(gè)方面:一是調(diào)整數(shù)據(jù)庫(kù)字符串,二是調(diào)整程序?qū)幼址?,將其設(shè)置為UNICODE。只有全面考慮到1和2兩個(gè)方面,MSSQL亂碼問(wèn)題才能得到妥善的解決。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站題目:MSSQL亂碼問(wèn)題:解決之路(mssql亂碼)
瀏覽路徑:http://m.5511xx.com/article/codcjds.html


咨詢
建站咨詢
