1. 程式人生 > >linux下tomat自動啟動引發的中文亂碼問題探討

linux下tomat自動啟動引發的中文亂碼問題探討

前幾天剛總結一片博文《設定tomcat自動啟動》,以為tomcat 在Windows/Linux下作為服務自動啟動的問題很好的解決了。不想,UAT環境發現MYSQL資料庫中文亂碼問題,排查了一翻,發現直接到tomcat安裝目下/bin下面呼叫startup.sh啟動,不會產生中文亂碼問題,而改為服務方式啟動tomcat,則會產生。
         考慮到MYSQL的字符集設定沒變化(設定為GBK編碼),程式碼也沒變化,應該Tomcat字符集的讀取有問題。在網上查了大半天,發現兩種解決問題的辦法:
        (1)修改/etc/rc.d/rc.loca指令碼,在腳本里新增export  LC_ALL  = zh_CN.GBK, 重啟計算機。試驗後無效。其實,在嘗試該方法前,可用locale命令檢視系統設定的語言選項;
        (2)修改catalina.sh指令碼,在這裡我是編輯/etc/init.d/tomcat$port($port是我的tomcat埠號,看過設定tomcat自動啟動
tomcat自動啟動》你會懂的
),新增export CATALINA_OPTS=-Dfile.encoding=GBK;嘗試後,問題解決。
        export CATALINA_HOME=/prog/tomcat/$port
       export JAVA_HOME=/prog/jdk1.6.0_22
       export CATALINA_PID=/prog/tomcat/$port/conf/catalina.pid
       export CATALINA_OPTS=-Dfile.encoding=GBK

       
結論:
               (1)Linux下手動啟動tomcat和自動啟動(包括封裝成服務啟動)所取的字符集設定不同;
                (2)自動啟動必須指定JVM的字符集編碼,且和資料庫的字符集保持一致
             
        但是,為什麼要指定呢?這個問題還待解決。
        請高手指點。謝謝!