陌上花開(kāi)

          遇高山,我御風(fēng)而翔,逢江河,我凌波微波

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
          最近一個(gè)項(xiàng)目,用到了mysql數(shù)據(jù)庫(kù),很不幸的是我遇到了亂碼問(wèn)題,分析了一下,我覺(jué)得不是網(wǎng)頁(yè)的問(wèn)題.因?yàn)?我在MYSQL里直接添加中文的數(shù)據(jù)能在網(wǎng)頁(yè)上正常顯示,可是在網(wǎng)頁(yè)中操作添加的數(shù)據(jù),到MYSQL數(shù)據(jù)庫(kù)里一看,全是???問(wèn)號(hào).跟蹤看了下,程序中最后處理到數(shù)據(jù)庫(kù)操作時(shí),還是中文,操作到數(shù)據(jù)庫(kù)后,就是?問(wèn)號(hào)了,能在mysql表中直接添加中文數(shù)據(jù)并能在網(wǎng)頁(yè)上正常顯示,說(shuō)明數(shù)據(jù)庫(kù)表的編碼是對(duì)的,程序中最后處理的數(shù)據(jù)也是中文,這也說(shuō)明程序中也沒(méi)有問(wèn)題,問(wèn)題可能出在MYSQL數(shù)據(jù)庫(kù)連接字符串上,于是我把mysql數(shù)據(jù)庫(kù)連接字符串改為:  jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8(有時(shí)可能需要將符號(hào)(&)轉(zhuǎn)碼寫(xiě)成(&)),試了一下,還是不行,百思不得其解,就問(wèn)了下google,有人說(shuō),可能是數(shù)據(jù)庫(kù)的默認(rèn)編碼錯(cuò)誤,原因在于MYSQL服務(wù)器使用的默認(rèn)編碼,在沒(méi)指定數(shù)據(jù)庫(kù)的字符編碼時(shí),創(chuàng)建的數(shù)據(jù)庫(kù)就使用MYSQL服務(wù)器的默認(rèn)編碼,但是,如果MYSQL服務(wù)器的配置文件沒(méi)有指定編碼時(shí),很可能就是使用的latin1編碼.
          查看服務(wù)器和數(shù)據(jù)庫(kù)使用何種編碼的MYSQL命令為:
          SHOW VARIABLES LIKE 'character_set_%'; 
          以及 SHOW VARIABLES LIKE 'collation_%';
          看到里面使用的編碼了,我本以為應(yīng)該使用的是utf8,所以,不是utf8的,那就說(shuō)明問(wèn)題在這里了.

          運(yùn)行命令:SHOW VARIABLES LIKE 'character_set_%'; 結(jié)果如下
          'character_set_client', 'utf8'
          'character_set_connection', 'utf8'
          'character_set_database', 'latin1'
          'character_set_filesystem', 'binary'
          'character_set_results', 'utf8'
          'character_set_server', 'latin1'
          'character_set_system', 'utf8'
          'character_sets_dir', 'D:\soft_work\mysql\share\charsets\'
          果然發(fā)現(xiàn)有幾個(gè)不對(duì)的
          運(yùn)行命令:SHOW VARIABLES LIKE 'collation_%'; 結(jié)果如下
          'collation_connection', 'utf8_general_ci'
          'collation_database', 'latin1_general_ci'
          'collation_server', 'latin1_general_ci'

          只要把那幾個(gè)的編碼改成utf8的,那應(yīng)該就可以了.
          1: 在Mysql的配置文件 my.ini里加上服務(wù)器的默認(rèn)編碼配置: default-character-set=utf8
          2: 修改你的數(shù)據(jù)庫(kù)的字符編碼:進(jìn)入Mysql數(shù)據(jù)庫(kù),通過(guò)命令修改你的數(shù)據(jù)庫(kù)字符編碼:
          ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci 
          (修改后需要重啟Mysql數(shù)據(jù)庫(kù))
          3: 如果你的表以及表里的字段使用了不正確的字符編碼,同樣需要修正過(guò)來(lái):命令:
           修改表的編碼: ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
           修改字段的編碼: ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
          (做好了時(shí),在看一下上面那兩個(gè)查看字符編碼的命令,看看是否全部都變成了utf8)
          把mysql數(shù)據(jù)庫(kù)的編碼改為utf8后,有試了一下程序,發(fā)現(xiàn)不在是亂碼了,終于好了,
          總結(jié),mysql的亂碼有一下幾個(gè)方面
          1,JSP設(shè)計(jì)頁(yè)面上是中文,但運(yùn)行時(shí)看到的是亂碼,如果是這種情況,就要指定jsp頁(yè)面的編碼,默認(rèn)情況下,jsp頁(yè)面的編碼是ISO-8859-1,解決方法就是在jsp頁(yè)面的編碼地方加入
          <%@ page language="java" contentType="text/html;charset=utf8" %>,
          2 ,當(dāng)用Request對(duì)象獲取客戶(hù)提交的漢字時(shí),會(huì)出現(xiàn)亂碼,那么就需要在項(xiàng)目中加入filter了,(filter在tomcat中自帶的有例子,可以照著例子改一下,也可以在googl中搜索一下)
          3,由于使用doget方法引起的亂碼,可以試著使用dopost提交,
          或者是打開(kāi)tomcat的server.xml文件,找到區(qū)塊,加入如下一行: 

          URIEncoding=”GBK” 

          完整的應(yīng)如下: 
          <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"
           connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf8"/>
          需要重啟tomcat,

          4,寫(xiě)入到數(shù)據(jù)庫(kù)是亂碼:
          如果你是通過(guò)JDBC直接鏈接數(shù)據(jù)庫(kù)的時(shí)候,配置的代碼如下:
          jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=utf8
          這樣保證到數(shù)據(jù)庫(kù)中的代碼是不是亂碼。

          5,如按照上述步驟解決,寫(xiě)到數(shù)據(jù)庫(kù)中的還是亂碼,就要檢查數(shù)據(jù)庫(kù),表的編碼方式了,如果跟程序中的不一致,就要按照本文的介紹的方法修改數(shù)據(jù)庫(kù)或者是表的編碼了。

          posted on 2010-03-01 15:52 askzs 閱讀(6240) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): mysql

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          我要啦免费统计
          主站蜘蛛池模板: 湘阴县| 兴宁市| 濮阳市| 安吉县| 平顶山市| 内黄县| 彩票| 梅州市| 图片| 舒城县| 海阳市| 息烽县| 城步| 廊坊市| 金门县| 永泰县| 闽侯县| 黑河市| 临汾市| 屯留县| 鄂温| 格尔木市| 布尔津县| 安康市| 德格县| 汝南县| 鄂尔多斯市| 康平县| 景洪市| 茌平县| 屏边| 福建省| 册亨县| 星座| 南宁市| 东光县| 富阳市| 松潘县| 灵武市| 子长县| 沙河市|