数据库篇 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值