Linux、Mysql、Myeclipse中文乱码问题

问题描述:
在Linux下,通过Myeclipse平台,JDBC连接Mysql数据库。关键字:中文乱码。

问题分析:
首先要知道数据的流向问题:
信息输入路径:client→connection→server
信息输出路径:server→connection→results
换句话说,每个路径要经过3次改变字符集编码。以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入 results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的, 破坏性的。所以就转不回来了。

解决办法:
(1)Mysql:
Mysql5.0 字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

上面列出的值就是系统的默认值。

一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连 接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

但这里要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。
一劳永逸的做法是修改数据库的my.conf。
安装好数据库后,一般要将/usr/share/mysql文件夹下的my-larger.conf my-medium.cnf
my-small.cnf 中的任意一个拷贝到/etc下,重命名为my.cnf。然后在my.cnf文件中,分别在[client]和[mysqld]下添加default-character-set=utf8。即修改默认的字符集。保存后重新启动数据库服务。(/sbin/service mysql restart)

重启后,通过show create table tablename;可以查看表的默认编码。如果表是在修改my.conf以前创建的,那么这些表的默认编码将保持修改my.conf之前的状态。可以通过下面的sql语句修改:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name
;
例如:
ALTER TABLE T1 CONVERT TO CHARACTER SET utf8;

(2) 数据库连接语句:

jdbc:mysql://127.0.0.1:3306/scp?useUnicode=true&characterEncoding=utf8

最后一项utf8。

(3) 设置Myeclipse(GA8.5):

Windows->Preferences->General->Content Types->Text
,选择java,设置下面的Default encoding为UTF-8
重启。

文章来源:http://hi.baidu.com/crashice/blog/item/d65d2837296ebebad1a2d372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值