windows下的web項目放到linux的tomca下運行,mysql出現中文亂碼的解決方案

寫一個web項目,使用了 spring , spring mvc, hibernate, maven ,mysql 在windows環境下,mysql沒有出現中文亂碼問題,而在linux環境下,mysql出現了中文亂碼問題。現作一簡單總結: java

1.web項目鏈接數據庫的URL必定要寫對, mysql

jdbc_url=jdbc:mysql://localhost:3306/ecampus?useUnicode=true&characterEncoding=UTF-8

2.mysql建的數據庫,web項目,所有都是UTF-8編碼 。 linux

3.web項目是使用maven構建的,使用mavne在編譯類,打war包千萬指定爲使用UTF-8格式 。若是在war 包運行在windows環境,則千萬不要指出。由於默認狀況下,maven使用系統的默認字符集進行編譯,打war包。,windows是GBK,linux是UTF-8, web

如:<properties>
        <java-version>1.6</java-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
    </properties>

<!--編譯插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                    <optimize>true</optimize>
                    <debug>true</debug>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
            <!-- war打包插件, 設定war包名稱不帶版本號 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin> spring

4.mysql 共有四個字符集。包括:server,db,client,connection. sql

mysql所建的數據庫(db)必須是utf8。其它的可以使用默認latin1(此爲linux下mysql默認的字符集),固然最好使用utf-8。這樣,在mysql命令行也能看到中文,而且不出現中文亂碼。讀取記錄時,也是中文,無亂碼。若是使用mysql默認字符集latin1(ISO-8859-1)那麼在mysql命令行,中文仍是亂碼,可是使用HeidiSQL工具鏈接mysql數據庫,仍是能夠看到中文的,而且記取記錄時,也是中文。 數據庫

ubuntu下修改mysql的默認字符集: apache

定位到/etc/mysql/my.cnf文件 ubuntu

[client]標記下修改成 windows

default-character-set=UTF-8


[mysqld] 標記下修改成
character-set-server=UTF-8


修改後,記得重啓mysql服務:

使用命令:service mysql restart

使用命令:mysql -uroot -proot 登錄到mysql命令行

在mysql命令行,選擇數據庫後,使用status;命令,能夠看到字符集信息。

Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1


5.我用的liux發行版是(ubuntu 12.04 桌面版,)

在命令行。輸入locale  查看當前linux的默認字符集。
這裏,必定要所有使用en_US.UTF-8  .在ubuntu下,是修改/etc/default/locale文件 。

修改爲:

LANG=en_US.UTF-8
LANGUAGE=en
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

重啓一下系統後。

這樣,ubuntu 系統是 UTF-8,web項目的war 包是UTF-8,  mysql建的數據庫也是UTF8, 中文就不會出現亂碼了。這裏還有一點小區別,就是剛纔提到的,若是mysql 的server characterset ,client characterset ,conn character 都是latin1,那麼,從mysql命令行看中文,仍是亂碼,但讀出來就不是亂碼了。可能使用HeidiSQL來讀一下。 這裏放心 。ubuntu是支持lantin1(ISO-8859-1)的,能夠用命令:locale -m來查看。mysql底層此時使用latin1進行編碼 。若是想在mysql 命令行中文不出現亂碼,就須要修改mysql的默認字符集。修改方法上面已經提到過了。


6.而在windows系統下想要不出現亂碼須要這樣作:windows默認字符集是GBK(好像修改不了的) ,因此maven構建時,也不用指出是utf-8編碼 ,使用系統默認,GBK便可。而mysql 數據庫,須要修改成以下配置。

Server characterset:    GBK
Db     characterset:    utf8
Client characterset:    GBK
Conn.  characterset:    GBK

即修改mysql 的默認字符集。具體 操做爲:

修改my.ini文件

[client]標記下修改成

default-character-set=GBK


[mysqld] 標記下修改成
character-set-server=GBK



以上是我這三天來,摸索出來的,但願能幫到各位。。

相關文章
相關標籤/搜索