Home >Database >Mysql Tutorial >mysql5 乱码问题解决方案_MySQL

mysql5 乱码问题解决方案_MySQL

WBOY
WBOYOriginal
2016-06-01 13:17:181067browse

今天在写项目时碰到了mysql数据库数据乱码的问题,也从网上查了很多方法,前后折腾了两个小时才终于调整好。现在就把调整过程中碰到的一些问题记录下来:

1.项目是SSH架构,一开始我以为是调用hibernate的save方法出现的问题,于是更改了applicationContext.xml中对hibernate的配置,在

中添加了下面两条属性:

1 <prop key="connection.useUnicode">true</prop>2 <prop key="connection.characterEncoding">UTF-8</prop>

但是经过测试,发现mysql中显示中文的字段依旧是一连串的问号。于是开始着手查找数据库自身的编码问题。

 

2.按照网上说的,首先修改mysql的配置文件my.ini。

在client中修改如下字段:default-character-set = utf8

在mysqld中修改如下字段:

character-set-server = utf8
collation-server = utf8_general_ci

在mysql中修改如下字段:default-character-set = utf8

如果配置文件没有上述字段,自行添加即可。修改完成后发现情况依旧没有改观。于是只好看是查看数据库和数据库表的属性。

 

3.打开命令行,首先输入show variables查看下面几个字段:

character_set_client

character_set_connection

character_set_database

character_set_server

collation_connection

collation_database

collation_server

是不是都变成了utf8。一般情况下修改了配置文件之后,上面几个字段都是没问题的。如果有问题,可以使用如下命令:set @@character_set_xxx = utf8解决。

当然也可以输入status属性查看,情况都差不多的。

 

4.上面的属性既然没错,那么只好手动修改数据库和数据库表的属性了。

1 alter database db_name character set utf82 3 alter table table_name character set utf8

 

改好之后,再次尝试inset中文,发现依然是一串问号。这个时候已经基本无奈了,没办法,只好自己重新建了一个test数据库和test数据库表,并在建数据库和建表时设置了默认编码:

1 create database test character set utf8;2 use test;3 create table test(id int primary key, name varchar(20) not null) default charset=utf8;

这时,向测试代码插入数据竟然成功了。所以至此我才发现,之前所有的改动基本是正确的,只有对数据库和数据库表的修改不知为什么没有成功,还有待对mysql的深入研究吧。

最后,把数据库和数据库表全部drop掉,再重新建一遍,中文乱码的问题得到解决。从hibernate向数据库插数据也没问题了。

 

5.命令行显示中文可能会有些问题,因为windows命令行默认的是gbk编码(可以右键->属性查看到),所以我们还需要set names gbk来解决。但是,你如果用图形界面观察数据库中的数据,是没有问题的。

 

6.如果到最后实在找不到解决办法:重装。但是,要是你根本没有尝试过一些解决方案就急不可耐的重装数据库,只能说作为一个工程师你还欠缺的太多。因为我们需要的是一种培养自己动手解决问题的能力。实话说,重装是最笨的解决办法了。

所以,对网上那些动不动就喊着”重装一遍不就好了“的人嗤之以鼻,因为你根本不是在指导别人解决问题。

 

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn