`
Jon_Ronson
  • 浏览: 3804 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL中文乱码解决方案

阅读更多
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




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics