MySQL中文数据问题&字符集问题

本文探讨了MySQL中出现中文数据问题的本质,即字符集不匹配导致的乱码现象。当客户端以GBK编码插入中文数据到服务器时,由于服务器默认采用UTF8,导致数据插入失败。解决方案包括改变服务器默认接受字符集为GBK,以及调整服务器向客户端返回数据的字符集为GBK。通过设置`set names gbk`,可以协调客户端与服务器之间的字符集,避免乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL中文数据问题

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

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

-- 插入中文数据
Insert into my_student values (‘5’,’itcast0005’,’张越’,’男’);

这里写图片描述
客服端向服务器插入中文数据:没有成功
的原因: 乱码代表的是‘张越’在当前编码(字符集)下对应的二进制编码转换成的十六进制:两个汉字==>四个字节(GBK)
报错:服务器没有识别对应的四个字节:服务器认为数据是UTF8,一个汉字有三个字节;读取三个字节转换成汉字(失败),剩余的在读三个字节(不够),最终失败。

所有数据库服务器认为(表现)的一些特性都是通过服务器的变量来保存;系先读取自己的变量,看看应该怎么表现
查看服务器到底识别哪些字符集
Show character set ;
这里写图片描述
基本上:服务器是万能的,什么字符集都支持
既然服务器识别这么多,总有一种服务器默认的跟客户端打交道的字符集

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

这里写图片描述
问题根源:客户端数据只能是GBK,而服务器认为是utf8;矛盾产生
解决方案:改变服务器,默认的接受字符集为GBK

-- 修改服务器认为的客户端数据的字符集为gbk
Set character_set_client = gbk;

插入成功

查看数据发现乱码
原因:数据来源是服务器,解析数据是客户端(客户端只识别gbk;只会两个字节一个汉字);
但是事实服务器给的数据utf8,三个字节一个汉字 乱码

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

-- 修改服务器给定数据字符集为gbk
Set character_set_results = gbk;

这里写图片描述
Set 变量 = 值;修改只是会话级别(当前客户端,当次连接有效,关闭失效)

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

Set names gbk ====》
character_set_client,character_set_results,character_set_connection

-- 快捷设置字符集
Set names gbk;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值