Linux平台下修正MySQL中文乱码问题

操作系统环境:

RHEL4.6、MySQL 6

现象:

在此电脑上安装了Tomcat作为web服务器,部署了一个项目,通过jdbc连接到mysql数据库。但是发现中文输入输出乱码现象。

解决步骤:

1. 找到mysql的配置文件

网上说,mysql的配置文件就是/etc/my.cnf。但是这个文件并不一定存在,由于你可能采取的MySQL安装方式跟网上所说的不一样,就 不一定能够找得到/etc/my.cnf。因此,你需要使用find命令查找cnf文件。记得不要去找my.cnf因为它不一定存在,而应该 找*.cnf。

# find / -iname '*.cnf' -print
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/mysql-test/std_data/ndb_config_mycnf2.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/mysql-test/std_data/ndb_config_mycnf1.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/mysql-test/std_data/bug15328.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/support-files/my-huge.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/support-files/my-large.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/support-files/my-medium.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/support-files/my-innodb-heavy-4G.cnf
/usr/local/mysql-6.0.4a-alpha-linux-i686-glibc23/support-files/my-small.cnf
/usr/share/ssl/openssl.cnf

找到之后,复制一个出来
# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf

2. 打开my.cnf修改编码

# vi /etc/my.cnf

在[mysqld]下添加
default-character-set=utf8

在[client]下添加
default-character-set=utf8

3. 重启mysql

根据你安装mysql的方式的不同,采用不用的命令来重启你的mysql。如果你配置过使用mysqld自启动方式,可以执行
# /etc/rc.d/init.d/mysql restart
来重启。
或者你把mysql配置成系统服务的方式,你可以执行
# service mysql restert

但是如果你仅仅按照INSTALL-BINARY来启动mysql的话,如
shell> bin/mysqld_safe --user=mysql &
那么你可能需要找出mysql的进程,然后kill了它们。如
# ps -aux | grep mysql
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.3/FAQ
root 24246 0.0 0.0 4532 1076 pts/7 S 13:36 0:00 /bin/sh bin/mysqld_safe --user=mysql
mysql 24273 0.0 1.0 305872 43712 pts/7 S 13:36 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --pid-file=/usr/local/mysql/data/cmmi.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock
从显示出来的结果找到进程id,杀掉他们
# kill -9 24246
# kill -9 24273
最后再重启。

4.登录mysql看看修改成功否

# mysql
mysql> show variables like 'character_set_%';
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |<!-- IWMS_AD_BEGIN-->

<script src="http://www.linuxidc.com/system/system60.js" type="text/javascript"></script><script type="text/javascript">&lt;!-- google_ad_client = &quot;pub-5195587195407606&quot;; /* Linuxidc 468x60, ������ 08-8-31 */ google_ad_slot = &quot;9963827011&quot;; google_ad_width = 468; google_ad_height = 60; //--&gt; </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><script>google_protectAndRun(&quot;ads_core.google_render_ad&quot;, google_handleError, google_render_ad);</script>
<!-- IWMS_AD_END-->
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-6.0.16a-linux-i686/share/mysql/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.00 sec)

mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

5. 修改已经部署的数据库编码

# mysql
mysql>use dbname
mysql>alter database dbname character set utf-8;

或者修改这个数据库的文件 $mysql_data_path/dbname/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci

default-character-set=utf8
default-collation=utf8_general_ci

重启mysql。

6. 以后创建数据库时,为了保险起见,你可以指定编码创建:

# mysql
mysql>create database dbname character set utf-8;

7. 检查你的Java应用的JDBC连接字符串

设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值