学习笔记(21):6天玩转MySQL-20中文数据问题

研发管理 专栏收录该内容
21 篇文章 0 订阅

立即学习:https://edu.csdn.net/course/play/2300/35869?utm_source=blogtoedu

# 中文数据问题

 

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

 

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

 

-- 插入数据(中文)

insert into my_student values(5,'005','张越','男');

 

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

 

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

 

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

 

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

 

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

show character set;

 

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

 

//既然服务器识别那么多,总有一种是服务器默认的跟客户端打交道的字符集。

 

-- 查看服务器默认的对外处理的字符集

show variables like 'character_set%';

 

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

 

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

Set character_set_client = gbk;

 

-- 修改服务器认为的客户端数据的字符集为GBK

Set character_set_client = gbk;

 

如果显示表数据,发现中文乱码,这样的原因是:数据来源是服务器,解析数据是客户端(客户端只识别GBK:智慧两个字节一个汉字),但是事实服务器给的数据确实UTF8,三个字节ig汉字->乱码

 

解决方式:修改服务器给定数据的字符集为GBK

set character_set_result = gbk;

 

 

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

 

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

Set names gbk; ==> character_set_client,character_set_result,character_set_connection

 

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值