MySQL学习笔记(7)-中文数据问题

中文数据问题本质是字符集问题

计算机只识别二进制:人类更多是识别符号:需要有个二进制与字符的对应关系(字符集)

客户端向服务器插入中文数据:没有成功

-- 插入数据(中文) set names GBK;
insert into my_student values(5,'itcast0005','张三','男');

原因:\xB7代表的是张三在当前编码(字符集)下对应的二进制编码转换成的十六进制:两个汉字=》四个字节(GBK)

报错:服务器没有识别对应的四个字节:服务器认为数据是UTF8,一个汉字有三个字节:读取三个字节转换成汉字(失败),剩余的再读三个字节(不够):最终失败。

所有的数据库服务器认为(表现)的一些特性都是通过服务器端的变量来保存:系统先读取自己的变量,看看应该怎么表现。

-- 查看服务器到底识别哪些字符集

show character set;

show variables like 'character_set%';

-- 查看所有字符集
show character set;

基本上:服务器是万能的,什么字符集都支持

-- 既然服务 器识别这么多:总有一种是服务器默认的跟客户端打交道的字符集

show variables like 'character_set%';

-- 查看服务器默认的对外处理的字符集
show variables like 'character_set%';

问题根源:客户端数据只能是GBK,而服务器认为是UTF8:矛盾产生

解决方案:改变服务器,默认的接收字符集为GBK;

set character_set_client = gbk;

-- 查看服务器默认的对外处理的字符集
show variables like 'character_set%';
-- 修改服务器认为的客户端数据的字符集为GBK
set character_set_client = gbk;
show variables like 'character_set%';

插入中文的效果

-- 插入数据中文
insert into my_student values(5,'itcast0005','张三','男');

查看数据效果:依然是乱码


原因:数据来源是服务器,解析数据是客户端(客户端只识别GBK:只会两个字节一个汉字):

但是事实服务器给的数据却是UTF8,三个字节一个汉字:乱码

解决方案:修改服务器给客户端的数据字符集为GBK

Set character_set_results = GBK;

show variables like 'character_set%';
-- 修改服务器给定数据的字符集为GBK
set character_set_results = gbk;
show variables like 'character_set%';

查看数据效果


set 变量 = 值;修改只是会话级别(当前客户端,当次连接有效;关闭失效)

设置服务器对客户端的字符集的认识:可以使用快捷方式:set names 字符集

set names gbk;-> character_set_client,charcter_set_results,charcter_set_connection

use mydatabase;
show variables like 'character_set%';
set names gbk;
show variables like 'character_set%';

Connection连接层:是字符集转变的中间者,如果统一了效率更高,不统一也每问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值