写一个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
以上是我这三天来,摸索出来的,但愿能帮到各位。。