MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。下面将分两部分,分别设置服务器编码和数据库、数据表与连接部分的编码,从而杜绝中文乱码的出现。

一、服务器编码设置

1、安装MySQL时,其中会有一个步骤选择编码方式,此时选择utf-8、gbk即可。假如不选择,默认的编码是:latin1

2、在安装完成之后,手动修改其配置文件,如下:
(1)、修改 MySQL安装目录下面的my.ini(Windows)、my.cnf(Linux),设置:

[client]
 default-character-set=utf8
 [mysqld]
 default-storage-engine=INNODB
 character-set-server=utf8
 collation-server=utf8_general_c



(2)、添加或修改 data目录中相应数据库的目录下的db.opt(安装MySQL文件夹目录下)配置文件:

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


二 、数据库、数据表和连接部分的编码设置

1、设置数据库和表编码

要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码。如果没有指明,将是默认的latin1,用得最多的应该是这3种字符集 gb2312、gb、utf8。如何去指定数据库和数据表的字符集呢?下面用utf8为例:

创建数据库的时候:
如:

mysql>CREATE DATABASE Message
 mysql>CHARACTER SET 'utf8'
 mysql>COLLATE 'utf8_general_ci';


创建数据表的时候:
如:

mysql>USE Message;
 mysql>CREATE TABLE person(
 personId int(11) not null primary key auto_increment,
 personName varchar(20) not null,
 personAccount varchar(20) not null,
 personPass varchar(20) not null,
 personDegree varchar(20) not null,
 personEmail varchar(30) not null,
 personAddr varchar(30) not null
 )ENGINE=MYISAM 或 ENGINE=InnoDB DEFAULT CHARSET=utf8;



2、设置连接编码

首先查看链接编码是否为gb2312、gbk、utf8,查看默认的编码格式命令:

mysql> show variables like "%char%";
 +--------------------------+---------------+
 | Variable_name | Value |
 +--------------------------+---------------+
 | character_set_client | latin1|
 | character_set_connection | latin1|
 | character_set_database | latin1|
 | character_set_filesystem | binary |
 | character_set_results | latin1|
 | character_set_server | latin1|
 | character_set_system | latin1|
 +--------------------------+-------------+
 修改 'latinl' 数据库默认值为:gbk、utf8、gb2312命令:
 mysql> SET character_set_client='utf8';
 mysql> SET character_set_connection='utf8';
 mysql> SET character_set_database='utf8';
 mysql> SET character_set_results='utf8';
 mysql> SET character_set_server='utf8';
 mysql> SET character_set_system='utf8';
 修改完毕后,可以再次查看编码格式是否成功:
 mysql> show variables like "%char%";
 +--------------------------+---------------+
 | Variable_name | Value |
 +--------------------------+---------------+
 | 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|
 +--------------------------+-------------+


用管理员身份运行命令提示符,重启MySQL输入关闭开启命令:
C:\Windows\systen32>net stop mysql
MySQL,服务正在停止.
MySQL,服务已成功停止。
C:\Windows\systen32>net start mysql
MySQL,服务正在启动.
MySQL,服务已经启动成功。
设置好连接编码重启MySQL后,现可以尝试插入中文:
mysql>insert into person values(1003,'展博','zb','10005','大学','1005@163.com','朝阳路6号');
查询插入的数据是否成功:
mysql> select * from person ;

三 、完整示例

1.安装MySQL服务器时设置编码,修改my.ini和dataTable.db中的编码为gbk、utf8、gb2312
2.写语句创建一个数据库时后面添加
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
写语句创建一个数据表时后面添加
ENGINE=MYISAM 或 ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.查看连接编码是否为:gbk、utf8、gb2312格式
4.重启MySQL
5.插入中文数据,完毕。 

四、可以用第三方软件自动编译转码

如:Navicat for MySQL