2017-11-20MySQL 字符集与乱码问题

您现在的位置是: 首页 > MySQL技术 > MySQL 字符集与乱码问题

383次阅读

牵涉到 :
   字符集 , 乱码
   几乎 80% 的初学者 , 在开发中 , 在学习中 , 会遇到过乱码的困扰
   我们现在就来学习 , 怎么样以后才能不乱码 , 不受乱码的干扰 ;


乱码 :
   对计算机而言 , 没有这个乱码 , 只是对人而言 , 人看不懂
   乱码只是 文字本来的字符集 和 展示的字符集 不一致
   想要不乱码很简单 :  输入的字符集和展示的字符集一致 , 自然就不会乱码 ;
   选字符集 ->  就选 utf8  即可 , 这是大趋势
   既然是 utf8; 为什么在 mysql 中 , 有的会 set names gbk;

MySQL 字符集与乱码问题

世界银行存储就只认黄金,不论我们带着哪国的钱过去了,都给你折换成金条存起来下次你去取钱,你说,我要人民币,那么银行就会把你的黄金折换成人民币还给你这个银行就是连接器。连接器既可以使用utf8,也可以使用gbk;无论连接器是什么字符集,存储在数据库中的都是 utf8


一、查看字符集


show variables like '%charact%';

MySQL 字符集与乱码问题

现在这3者保持一致,gbk,不过这三个字符集可以人为更改的


2. 将客户端字符集改为 utf8


但是我们的黑窗口(cmd)是gbk编码的,插入内容,我们会发现乱码

1) 建表

create table test3 (
    name char(10) not null default ''
)charset=utf8;

2) 改客户端字符集并插入数据

set character_set_client = utf8;
insert into test3 values ('中国人民解放军');
select * from test3;
set character_set_client = gbk;


3. 将数据库返回的数据 改为 utf8 编码的


客户端是gbk编码的,返回utf8编码的数据,客户端肯定不认识,所以还是会乱码\

set character_set_results = utf8;
insert into test3 values ('中国人民解放军');
select * from test3;
set character_set_results = gbk;


4. 中间的连接器,使用utf8和gbk都是可以的


character_set_connection

因为连接器始终需要 gbk=>utf8 因为始终都需要存储成utf8

注意:

连接器不能使用较小的字符集,如ascii,在转换的时候会丢失一部分编码,而丢失的这部分编码是不可逆推回来的.


5. 如果三者都一致,可以用简写


set names gbk/utf8;


6. 我们知道,谁能连接数据库,谁就可以称为客户端


有时候我们用 .php文件 去连接数据库

我们的php就是客户端,那我们的php页面,编码统一使用的utf8;

我们只需要在 .php 文件里,

set names utf8; 即可保证不乱码

而有的学员是 在开发 php 的时 set names utf8;

在 命令行 黑窗口中还是 set names utf8;

这不就乱码了么,两个不同的客户端,各使各的参数就可以了


7. 杜绝乱码的,检查的几个步骤


1) php 文件是 utf8

2) html 页面的 meta 信息 也是utf8

3) 建表时,也是utf8

create table () charset=utf8;

4) php页面连接数据库时

set names utf8;

检查这四步,之后,如果仍然乱码,则继续检查这四步


上一篇:MySQL中的视图

下一篇:MySQL 中的校对集