问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql字符集乱码问题

发布网友 发布时间:2022-04-28 11:41

我来回答

4个回答

懂视网 时间:2022-05-01 10:29

博主不想和你说话,并向你扔了一张图~

技术分享

本文出自 “4072293” 博客,请务必保留此出处http://4082293.blog.51cto.com/4072293/1794824

MySQL数据库字符集乱码逻辑关系图

标签:字符集 乱码

热心网友 时间:2022-05-01 07:37

这样MySQL数据库默认的字符集是latin1,是瑞典的文字字符集,
1.你先要做的是用dos进入mysql数据库,然后对字符集重新进行配置,注意,每次使用mysql数据库的时候都要这样做
SET character_set_system= gbk;
SET character_set_client=gbk;
SET character_set_connection=gbk;
SET character_set_database=gbk;
SET character_set_results=gbk;
SET character_set_server=gbk;

SET collation_connection=gbk_bin;
SET collation_database=gbk_bin;
SET collation_server=gbk_bin;
然后再进行你的数据库的操作。
2.如果还没有解决你的问题,你进入mysql文件夹,将里面的my.ini文件夹中的default-character-set=gbk(gbk32)
然后重新启动你的mysql,进行数据库的操作。
这个是设置系统的编码格式,如果这个不好用的话,直接手动进行设置,下载SQL-Front软件,里面可以对这些文件的内容直接进行修改。试试吧

热心网友 时间:2022-05-01 08:55

一、转码失败
在数据写入到表的过程中转码失败,数据库端也没有进行恰当的处理,导致存放在表里的数据乱码。
针对这种情况,前几篇文章介绍过客户端发送请求到服务端。
其中任意一个编码不一致,都会导致表里的数据存入不正确的编码而产生乱码。
比如下面简单一条语句:
set @a = "文本字符串";
insert into t1 values(@a);
1. 变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码。
2. 写入语句在发送到 MySQL 服务端之前的编码由 CHARACTER_SET_CONNECTION 决定,假设此时编码为 B。
3. 经过 MySQL 一系列词法,语法解析等处理后,写入到表 t1,表 t1 的编码为 C。
那这里编码 A、编码 B、编码 C 如果不兼容,写入的数据就直接乱码。
二、客户端乱码
表数据正常,但是客户端展示后出现乱码。
这一类场景,指的是从 MySQL 表里拿数据出来返回到客户端,MySQL 里的数据本身没有问题。客户端发送请求到 MySQL,表的编码为 D,从 MySQL 拿到记录结果传输到客户端,此时记录编码为 E(CHARACTER_SET_RESULTS)。
那以上编码 E 和 D 如果不兼容,检索出来的数据就看起来乱码了。但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。
这一类又分为以下三个不同的小类:
1)字段编码和表一致,客户端是不同的编码
比如下面例子, 表数据的编码是 utf8mb4,而 SESSION 1 发起的连接编码为 gbk。那由于编码不兼容,检索出来的数据肯定为乱码。
2)表编码和客户端的编码一致,但是记录之间编码存在不一致的情形
比如表编码是 utf8mb4,应用端编码也是 utf8mb4,但是表里的数据可能一半编码是 utf8mb4,另外一半是 gbk。那么此时表的数据也是正常的,不过此时采用哪种编码都读不到所有完整的数据。这样数据产生的原因很多,比如其中一种可能性就是表编码多次变更而且每次变更不彻底导致(变更不彻底,我之前的篇章里有介绍)。举个例子,表 t3 的编码之前是 utf8mb4,现在是 gbk,而且两次编码期间都被写入了正常的数据。
3)每个字段的编码不一致,导致乱码
和第二点一样的场景。不同的是:非记录间的编码不统一,而是每个字段编码不统一。举个例子,表 c1 字段 a1,a2。a1 编码 gbk,a2 编码是 utf8mb4。那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。
三、LATIN1
还有一种情形就是以 LATIN1 的编码存储数据
估计大家都知道字符集 LATIN1,LATIN1 对所有字符都是单字节流处理,遇到不能处理的字节流,保持原样,那么在以上两种存入和检索的过程中都能保证数据一致,所以 MySQL 长期以来默认的编码都是 LATIN1。这种情形,看起来也没啥不对的点,数据也没乱码,那为什么还有选用其他的编码呢?原因就是对字符存储的字节数不一样,比如 emoji 字符 "❤",如果用 utf8mb4 存储,占用 3 个字节,那 varchar(12) 就能存放 12 个字符,但是换成 LATIN1,只能存 4 个字符。
总结
通过上面的详细说明,相信对 MySQL 乱码问题已经有一个很好的了解了。那来回顾下本篇的内容。本篇主要列列举了 MySQL 乱码可能出现的场景,并对应给出详细的处理方法以及相关建议,希望以后大家永远不会出现乱码问题。

热心网友 时间:2022-05-01 10:29

在连接数据库服务器时出现了问题。
说密码不对。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 如何修改mysql的字符库编码解决中文乱码问题 如何修改windows下mysql的字符集 据说中国即将面临战争,这是真的吗? 中国有开战的可能吗 中国真的会和美国发起战争吗? 中国真敢开战吗? 2016中国会发生战争吗 中国会开战吗 中国会不会发生战争啊 待上海指数过几天走到最低点后,买入000636风华高科股好不好呢? 000636什么时候复牌 大家看看000636 近期会怎么样 9.1买了就到现在7.1 郁闷死了 000636股票怎样 买了000636,今日暴跌,怎么办啊? 000636我5000点的前一天13.75进的,请帮忙分析如何操作 八月份股票sz000636怎样 大家感觉股票000636风华高科最近怎样? overflow属性是什么? 在股市中什么叫“中报行情”。 000636 这个股票我11.66买的 后市怎么操作 如何修改windows的默认字符集为utf-8 怎么修改mysql数据库字符集编码为utf-8 MYsql 字符集乱码的问题,困扰了好久,帮我解决了再加100分 安装mysql,字符编码为什么要选择UTF8?急。。。 光子斩击者的卡片信息 thrasher水洗标在哪里 《清明上河图》的历史价值是什么? 清明上河图之所以具有极高的历史价值原因是什么? 破壳鸡蛋能吃吗 清明上河图的历史价值是什么??? 美丽女孩与僵尸在校园的外国电影 清明上河图的历史价值是什么? 请求NHL各队的中文译名,万分感谢! 壳破了的鸡蛋能吃吗 壳破鸡蛋能吃吗 市场上的破壳鸡蛋能不能吃 鸡蛋破壳了还能吃吗 你知道《清明上河图》有何历史价值吗? 清明上河图有什么历史含义? 破壳鸡蛋可以吃吗