Monday 14 March 2016

MySQL 中文乱码解决方案

修改my.ini,如果此文件不存在,就在MySQL安装目录下(e.g. D:\mysql-5.1.34-win32)建立此文件

[mysql] 
default-character-set=gbk
[mysqld] 
default-character-set=gbk

稍微解释一下,[mysql] default-character-set=gbk就是告诉MySQL,现在客户端传过来的SQL包含有中文字符。
而[mysqld] default-character-set=gbk就是把MySQL的数据库改为中文编码。
用以下命令可以清晰地看到效果:
mysql> show variables like 'char%';
+--------------------------+---------------------------------------+
| Variable_name                 | Value                                 |
+--------------------------+---------------------------------------+
| character_set_client         | gbk                                   |
| character_set_connection | gbk                                   |
| character_set_database   | gbk                                   |
| character_set_filesystem  | binary                                |
| character_set_results       | gbk                                   |
| character_set_server       | gbk                                   |
| character_set_system      | utf8                                  |
| character_sets_dir           | D:\mysql-5.1.34-win32\share\charsets\ |
+--------------------------+---------------------------------------+

重启MySQL服务器后,以后建立的数据库和表都可以接受中文。

值得一提的是,在修改my.ini之前建立的数据库和表还是不能接受中文。需要找到数据库的dt.opt文件,比方以前建立过
create database mydb;

那么在D:\mysql-5.1.34-win32\data\mydb下,修改dt.opt

default-character-set=gbk
default-collation=gbk_chinese_ci

再重启服务器就可以了。

关于表的话,当然也可以用Alter命令修改,但更简单的方法就是drop再create一次就完了。

如果用Hibernate连接,只要简单地作如下配置

<property name="connection.url">jdbc:mysql://localhost:3361/mydb</property>

并不需要加上?useUnicode=true&amp;characterEncoding=GBK

No comments:

Post a Comment