MySQL乱码问题如何排查

MySQL客户端和服务器是怎么通信的?

1.首先请求会被MySQL客户端编码为字节序列之后通过网络传输到服务器。

对于MySQL自带的客户端来说,这个编码过程使用的字符集和我们使用的操作系统的默认字符集是一样的,类Unix系统的默认字符集就是utf8,Windows系统的默认字符集就是gbk。

启动MySQL客户端时,MySQL客户端就会检测到这个操作系统使用的是utf8字符集,并将客户端默认字符集设置为utf8。如果MySQL不支持自动检测到的操作系统当前正在使用的字符集,或者在某些情况下不允许自动检测的话,MySQL会使用它自己的内建的默认字符集作为客户端默认字符集。这个内建的默认字符集在MySQL 5.7以及之前的版本中是latin1,在MySQL 8.0中修改为了utf8mb4。

如果我们在启动MySQL客户端是使用了default-character-set启动参数,那么客户端的默认字符集将不再检测操作系统当前正在使用的字符集,而是直接使用启动参数default-character-set所指定的值。比方说我们使用如下命令来启动客户端:

mysql --default-character-set=utf8

那么不论我们使用什么操作系统,操作系统目前使用的字符集是什么,我们都将会以utf8作为MySQL客户端的默认字符集。

2.服务器收到字节序列请求之后,会认为该字节串是按照character_set_client系统变量编码的,之后将其从character_set_client转换到character_set_connection,再进行更深入的处理。

3.最后将响应发送至客户端时,又会按照character_set_results进行编码。

4.客户端收到响应字节串之后,按照本客户端规定的字符集进行解码。

对于MySQL自带的客户端来说,这个解码过程使用的字符集和我们使用的操作系统的默认字符集是一样的,类Unix系统的默认字符集就是utf8,Windows系统的默认字符集就是gbk。

系统变量

描述

MySQL客户端字符集

MySQL客户端字符集

character_set_client

服务器解码请求时使用的字符集

(服务器认为请求是按照该系统变量指定的字符集进行编码的)

character_set_connection

服务器处理请求时会把请求字符串从character_set_client转为character_set_connection

character_set_results

服务器向客户端返回数据时使用的字符集

(服务器采用该系统变量指定的字符集对返回给客户端的字符串进行编码)

从通信转码流程来看,要保证没有乱码出现:

character_set_client、character_set_connection和character_set_result这三个系统变量应该和客户端的默认字符集相同即可。

SET names命令可以一次性修改这三个系统变量。

实验验证

数据库字符集:

1.客户端发送请求时会将字符’我’按照utf8进行编码,也就是:0xE68891。

2.服务器收到请求后发现有前缀_gbk,则不会将其后边的字节0xE68891进行从character_set_client到character_set_connection的转换,而是直接把0xE68891认为是某个字符串由gbk编码后得到的字节序列。

3.再把上述0xE68891从gbk转换为character_set_results,也就是utf8。0xE688在gbk中代表汉字’鎴’,而0x91无法解码(我们可以看到上述查询结果中有1个warning)。

结论

解决乱码问题,要从客户端到服务器通信流程中的字符集编码、转码、解码来分析是哪一步的问题。

一般情况下,保证:

  • character_set_client
  • character_set_results
  • character_set_connection
  • 客户端的字符集编码

当其一致时就可解决乱码问题。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/230680.html<

(0)
运维的头像运维
上一篇2025-04-19 08:31
下一篇 2025-04-19 08:33

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注