重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
今天使用php操作數(shù)據(jù)庫時發(fā)現(xiàn)插入SQLServer2008數(shù)據(jù)庫里的中文字段出現(xiàn)亂碼,下面是我一開始時的一些情況:開發(fā)環(huán)境是php5.3.3+Apache2.2.17+SQLServer2008,php腳本文件的編碼是utf-8,傳給數(shù)據(jù)庫的編碼是GB2312(SQLServer的默認(rèn)字符編碼可能是這個,我不肯定),我用的是微軟官方提供的SQLSRV庫來連接數(shù)據(jù)庫的(PS:SQLServer2005開始已經(jīng)不支持用mssql.dll來連接了),故使用sqlsrv_query($conn,"setnamesGB2312");語句來設(shè)置傳給數(shù)據(jù)庫的編碼格式的,sql語句這樣寫了:insertintoOpinion(content)values('aaa中文內(nèi)容');運行這條sql語句,發(fā)現(xiàn)執(zhí)行不成功,用sqlsrv_errors()函數(shù)來輸出錯誤信息,得到如下結(jié)果:復(fù)制代碼代碼如下:Array([0]=Array([0]=IMSSP[SQLSTATE]=IMSSP[1]=-46[code]=-46[2]=AnerroroccurredtranslatingthequerystringtoUTF-16:???????????????У???д?Unicode??????????????.[message]=AnerroroccurredtranslatingthequerystringtoUTF-16:???????????????У???д?Unicode??????????????.))這是在網(wǎng)頁上顯示的結(jié)果,上面的亂碼是原封不動copy下來的。從“AnerroroccurredtranslatingthequerystringtoUTF-16”可以看出是字符編碼轉(zhuǎn)換有問題導(dǎo)致的。于是我使用php的iconv函數(shù)來對中文進(jìn)行強制編碼轉(zhuǎn)換,然后執(zhí)行sql語句,代碼如下:復(fù)制代碼代碼如下:$string=iconv('utf-8','GB2312//IGNORE','aaa中文內(nèi)容');$sql="insertintoOpinion(content)values($string)";[code]這時候又報錯了,錯誤信息如下:[code]Array([0]=Array([0]=42S22[SQLSTATE]=42S22[1]=207[code]=207[2]=[Microsoft][SQLServerNativeClient10.0][SQLServer]????'aaa????????'??Ч??[message]=[Microsoft][SQLServerNativeClient10.0][SQLServer]????'aaa????????'??Ч??))這個錯誤信息看不出什么頭緒,我又把sql語句輸出到網(wǎng)頁上看一下是不是sql語句寫錯了,輸出結(jié)果如下:復(fù)制代碼代碼如下:insertintoOpinion(content)values(aaa????????)咋一看好像沒問題,其實是有問題的,注意到后面那個括號里的參數(shù)是應(yīng)該用引號來括起來的(表示它是一個字符串),所以我又修改了sql語句,代碼如下:復(fù)制代碼代碼如下:$sql="insertintoOpinion(content)values('".$string."')";為了看清楚我放大點用單引號把$string括起來,這樣之后執(zhí)行sql語句成功,并且數(shù)據(jù)庫里保存的中文沒有亂碼。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比米易網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式米易網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋米易地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
先將分子或分母或兩個都轉(zhuǎn)化成8小數(shù)精度以上的類型,decimal,numeric,float 都可以。
然后做除法計算,將計算結(jié)果轉(zhuǎn)化為8位小數(shù)。
select convert(decimal(18,8), convert(decimal(18,8),1)/3)
select convert(decimal(18,8), 1/convert(decimal(18,8),3))
select CONVERT(decimal(18,8), convert(float,1)/3)
select CONVERT(decimal(18,8), 1/convert(float,3))
win8安裝sqlserver的注意事項:
1、
安裝的時候要以管理員的身份進(jìn)行,右擊安裝程序圖標(biāo)然后選擇以管理員身份運行
2、
如果機器上已經(jīng)有vs(特別是高版本的vs),要先卸載vs,然后再安裝sqlserver,(注意這個地方需要到控制面板-程序功能中看看是否有visual
studio,有可能是系統(tǒng)自帶了,或則其他程序
自動安裝了vs)
3、
有的時候安裝的過程,程序可能提示錯誤然后讓你重啟機器,但是重啟機器問題依舊,一般都是掛起問題,這個問題出在很多操作系統(tǒng)的各個版本的sqlserver,這時候刪除注冊表信息
a.開始菜單,運行,輸入regedit.exe打開注冊表
b.打開注冊表編輯器,選擇hkey_local_machine/system/currentcontrolset/control/session
manager中找到pendingfilerenameoperations項目,并刪除它。
c.打開安裝程序,就可以安裝啦!